为什么我不能在forEach的函数数组上使用Function.prototype.call?

时间:2014-09-25 22:05:16

标签: javascript

我想在全局范围内执行数组中的所有函数。我想使用速记,所以我决定在所有函数上使用Function.prototype.callcall Function.prototype的{​​{1}}方法。我不关心call发送给函数的参数。

forEach

为什么这不起作用并抛出以下错误?

[function(){}, function(){}].forEach(Function.prototype.call.call)

2 个答案:

答案 0 :(得分:5)

你想:

[function(){}, function(){}]
  .forEach(Function.prototype.call.bind(Function.prototype.call))

但是你可以使用已经为你提供Function的{​​{1}}构造函数来简化:

call

答案 1 :(得分:0)

  

为什么这不起作用并抛出以下错误?

内部调用类似于

Function.prototype.call.call.apply(undefined, function() {}, 0, [])
                                     ^--- it's `undefined` here because you haven't
                                          specified anything explicitly
                                          as a 2nd `forEach` arg

内部call期望其this指向正确的函数(在这种情况下为Function.prototype.call),而“你”正在传递undefined

从技术上讲,这段代码按预期工作:

[
    function(){console.log(1)},
    function(){console.log(2)}
]
    .forEach(Function.prototype.call.call, Function.prototype.call)

但elclanrs与bind的解决方案更好