2014-09-25 88 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

相關問題