为什么我不能.call()Function.call?

时间:2016-11-30 09:40:09

标签: javascript call

在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,因为此错误消息表明。

1 个答案:

答案 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()