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

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

-> 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 "метод" некоторой функции и использовать его как обычную функцию?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Проблема в том, что свойство 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));
0 голосов
/ 25 октября 2018

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

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