Можно ли использовать ссылку на атрибут вызова какой-либо функции и передать его в качестве значения?

1

Это не работает:

-> f = Number.prototype.toLocaleString.call
<- ƒ call() { [native code] }
-> typeof f
<- "function"
-> f(1)
<- Uncaught TypeError: f is not a function
    at <anonymous>:1:1

Можно ли ссылаться и использовать какой-либо call функции "метод" и использовать его как обычную функцию?

  • 1
    typeof f === "function" действительно сбивает меня с толку ...
  • 0
    Свойство .call любой функции в точности .call свойством любой другой функции. Также я не получаю эту ошибку; Я получаю жалобу, что .call() вызывается с this значением, которое не является функцией (что я и ожидал).
Теги:
functional-programming
function
first-class-functions

2 ответа

1
Лучший ответ

Проблема заключается в том, что любая функции call свойство эквивалентно Function.prototype.call, который не может быть назван сама по себе, без контекста вызова:

console.log(Number.prototype.toLocaleString.call === Function.prototype.call);

Решение состоит в том, чтобы явно дать вновь созданной функции контекст вызова исходной функции, который можно выполнить с помощью bind:

const f = Number.prototype.toLocaleString.call.bind(Number.prototype.toLocaleString);
console.log(f(3333));
1

Нет, call - это метод (унаследованный от Function.prototype.call) и как любой общий метод должен быть привязан к его цели, если вы хотите использовать его как обычную функцию. В этом случае целевым объектом является функция toLocaleString:

const f = Function.prototype.call.bind(Number.prototype.toLocaleString);
console.log(f(1));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню