2012-10-01 15 views
5

是否有任何瀏覽器限制或阻止我做任何其他的問題:在調用apply之前是否需要將參數轉換爲Array?

fn.apply(this, arguments); 

與:

fn.apply(this, Array.prototype.slice.call(arguments)); 

我知道apply需要一個「真正的」 Array作爲第二個參數,而是傳遞一個爭論收集似乎同樣有效。要麼...?

回答

4

根據該MDN,它「調用給定爲一個數組(或類似物體的陣列)設置該值和參數的一個函數」。鑑於arguments是一個類似數組的對象,所以在使用它時不應該有任何限制。

實際上,description明確表示arguments是一個有效的參數。

+1

我也這麼認爲,但我一直看到'Array.prototype.slice.call(參數)'這麼多的「專業」的代碼示例,我想必須有一個正當的理由...... – David

+0

,如果你想這是必要的對它們進行數組操作,比如追加,移位或推送,所以我認識的大多數開發人員比其他任何人都更習慣於這種習慣。 – saml

0

的支持是unknown上MDN。

只有Firefox是已知接受陣列狀物體爲Function.prototype.apply()第二個參數。我會在通過arguments之前謹慎行事。

相關問題