2013-02-22 51 views
0

我是從Mozilla開發者網絡閱讀這段代碼:瞭解函數參數使用切片

function list() { 
    return Array.prototype.slice.call(arguments); 
} 

var list1 = list(1, 2, 3); // [1, 2, 3] 

函數內部的線我感到困惑,爲什麼我使用call沒有指定對象服務作爲this

如果argumentsthis是這種情況下,那麼我沒有任何參數傳遞給slice函數,對吧?

如果我把一些隨機元素作爲this我得到一個空數組,像這樣:

return Array.prototype.slice.call([], arguments); 

我知道我誤解的東西,但什麼? :)

在此先感謝!

+0

這是一種常見的將類似數組*的對象轉換爲真實數組的方法。 – 2013-02-22 22:16:56

+0

確實是這樣,我的問題是切片,現在我知道我可以不傳遞任何東西給函數。 ;) – Kaeros 2013-02-22 22:18:53

+0

@FelixKling我認爲OP知道,因爲JS片段是來自MDC文檔的。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice#Array-like – 2013-02-22 22:19:40

回答

4

如果參數是this是這種情況下

...它是

那麼我不傳遞任何參數,切片功能,對不對?

正確。

+0

該死..現在我明白了。 。感謝編輯這個問題。 :)我的問題是在這種情況下切片。 – Kaeros 2013-02-22 22:16:12

1

slice時不帶任何參數

> x = [1, 2, 3] 
> x.slice() 
[1, 2, 3] 
> x.slice() == x 
false 

在您的例子叫做返回整個數組的副本,這樣做是爲了在arguments僞數組轉換爲真正的數組。