2014-09-25 94 views
0

我想在全局范围内执行数组中的所有函数。我想用一个简写,所以我决定在所有功能上使用Function.prototype.callcallFunction.prototypecall方法。我不在乎forEach发送给函数的参数。为什么我不能在forEach函数数组上使用Function.prototype.call?

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

为什么这不工作,并抛出以下错误?

TypeError: undefined is not a function 

回答

5

你想:

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

但是你可以使用Function构造函数已经给你call简化了一下:

.forEach(Function.call.bind(Function.call)) 
+1

撇开:Function.call === Function.prototype.call; (因为继承有效) – dandavis 2014-09-25 22:11:05

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更好

+0

哦,我从你的评论中加入了我的回答,然后我会赞成。 – elclanrs 2014-09-25 22:14:09

+0

['函数'可以重写,在这种情况下,你的代码将不起作用。 -1](http://stackoverflow.com/a/17245542/633183) – naomik 2014-09-28 21:44:56

+0

@naomik:我**从来没有**提到我的解决方案是理想的,并考虑到一切。别做小孩了。 – zerkms 2014-09-28 23:14:31

相关问题