我想在全局范围内执行数组中的所有函数。我想使用速记,所以我决定在所有函数上使用Function.prototype.call
和call
Function.prototype
的{{1}}方法。我不关心call
发送给函数的参数。
forEach
为什么这不起作用并抛出以下错误?
[function(){}, function(){}].forEach(Function.prototype.call.call)
答案 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
的解决方案更好