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

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

-> 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 ответа

Решение

Проблема в том, что любая функция 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));

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

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

Другие вопросы по тегам