这不起作用:
-> 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
“方法”并将其用作常规函数?
这不起作用:
-> 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
“方法”并将其用作常规函数?
问题是任何函数的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));