【问题标题】:Why can't I .call() Function.call?为什么我不能 .call() Function.call?
【发布时间】:2016-11-30 09:40:08
【问题描述】:

在 Javascript 中,Function.call() 可以在给定 this 值和零个或多个参数的情况下调用 Function

Function.call 本身就是一个函数。所以理论上,Function.call 应该与Function.call.call 具有相同(或类似作用)的功能。

在 V8 中,似乎是这样的:

> Function.call === Function.call.call
true

当我们调用Function.call()时,我们得到一个匿名函数

> Function.call()
[Function: anonymous]

但是,我无法在Function.call 上拨打.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

【问题讨论】:

  • 很好的问题和答案,即使在正常的编程环境中毫无意义:)
  • @nicovank 当然,但是我正在探索一些 Javascript 的“假设”,并且偶然遇到了这个问题。 :)
  • @Bergi 如果你传入 this 值,当然可以。混乱源于错误消息。

标签: javascript call


【解决方案1】:

简答:错误消息非常具有误导性。这与您收到的错误消息相同

(undefined)();

更长的答案:

第二个.call()thisFunction.call 调用。

不带参数调用它会导致它以undefined 作为this 值调用this

因此,你真的在​​做

Function.call.call(undefined)

这意味着你(隐喻地)在做

undefined.call()

这真的只是

undefined()

不向Function.call.call()this 参数传递任何内容(或undefined)本质上就是否定第一个Function.call()this 上下文(这将只是Function 本身),从而导致.call()undefined 上调用。

这会产生生成的错误消息:undefined is not a function

【讨论】:

  • ...所以工作示例将是 Function.call.call(Function)Function.call.call(console.log, console, "hello")
  • @Bergi 正确。同样,混淆源于 错误消息
  • 啊,我没有意识到你自己回答了你的问题。我只是认为添加一个使用 double-call 用法的示例可能有助于解释。
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 2017-01-18
  • 1970-01-01
  • 2016-03-16
  • 2013-02-08
  • 2023-03-18
  • 2017-06-01
  • 2012-03-15
相关资源
最近更新 更多