在Javascript中,Function.call()
可以在Function
值和零个或多个参数的情况下调用this
。
Function.call
本身就是一个功能。所以从理论上讲,Function.call
应该与Function.call.call
相同(或类似地起作用)。
在V8中,情况似乎如此:
> Function.call === Function.call.call
true
当我们调用Function.call()
时,我们会得到一个匿名函数
> Function.call()
[Function: anonymous]
但是,我无法在.call()
上致电Function.call
。
> Function.call.call()
TypeError: undefined is not a function
at repl:1:21
at REPLServer.defaultEval (repl.js:132:27)
at bound (domain.js:291:14)
at REPLServer.runBound [as eval] (domain.js:304:12)
at REPLServer.<anonymous> (repl.js:279:12)
at REPLServer.emit (events.js:107:17)
at REPLServer.Interface._onLine (readline.js:214:10)
at REPLServer.Interface._line (readline.js:553:8)
at REPLServer.Interface._ttyWrite (readline.js:830:14)
at ReadStream.onkeypress (readline.js:109:10)
这里发生了什么? Function.call
显然是一个函数 - 它不是undefined
,因为此错误消息表明。
答案 0 :(得分:4)
简答:错误消息非常误导。这是你做的同样的错误信息
(undefined)();
更长的回答:
使用.call()
this
调用第二个Function.call
。
在没有参数的情况下调用它会导致this
调用undefined
作为this
值。
因此,你真的在做
Function.call.call(undefined)
这意味着你(比喻)正在做
undefined.call()
真的只是
undefined()
将任何内容(或undefined
)传递给this
的{{1}}参数实际上是否定了第一个Function.call.call()
的{{1}}上下文(这只是this
本身{},导致在Function.call()
上调用Function
。
这会产生错误消息:.call()
。