这不起作用:
-> 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
“方法”并将其用作常规函数?
答案 0 :(得分:1)
否,call
是一种方法(从Function.prototype.call
继承),就像任何共享方法都需要bound指向其目标一样,如果您想将其用作普通函数。在这种情况下,目标对象是toLocaleString
函数:
const f = Function.prototype.call.bind(Number.prototype.toLocaleString);
console.log(f(1));
答案 1 :(得分:1)
问题在于 any 函数的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));