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“方法”并将其用作常规函数?

4

2 回答 2

1

不,call是一个方法(继承自Function.prototype.call),并且像任何共享方法一样,如果您想将其用作普通函数,则需要将其绑定到其目标。在这种情况下,目标对象是toLocaleString函数:

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

于 2018-10-24T21:26:48.210 回答
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));

于 2018-10-24T21:26:57.993 回答