2013-12-08 19 views
0

我一直在閱讀一本書,在回答有關push.apply的一個非常具體的問題時需要幫助。push.apply方法和這個參數

function SpecialArray(){ 
    var values = new Array(); 
    values.push.apply(values, arguments); 

    values.toPipedString = function(){ 
     return this.join("|"); 
    }; 

    return values; 
} 

var colors = new SpecialArray("red","blue","green"); 
console.log(colors.toPipedString()); 

我理解這段代碼做什麼,但我有些失落於:

values.push.apply(values, arguments); 

從我的理解。這使用push和apply將函數參數中的數組添加到values數組的0,1和2中。我不明白的是這個論點。

我知道改變這個值會將它指向另一個對函數有用的對象。在這種情況下,我嘗試將值更改爲其他值,因爲我只將參數數組推入新數組,並且不需要更改此指針,但是在結果中除了值以外的任何內容都會留空白?

有人可以向我解釋爲什麼改變thisArg會產生空白? values.push應該已經表明我特別需要它在值數組中,並且只使用apply arrArg將數組連接到另一個類似於concat方法的數組中。

+0

當你進入'.apply()'時,'.push'方法已經失去了與'values'的關係。請記住,只有當你調用一個函數時纔會設置this。但是你不直接調用'.push()'。你正在調用'.apply()',它爲你調用'.push()'。所以你需要告訴'.apply()'這個值應該是你告訴它爲你調用的方法。 –

+0

...'.apply()'方法中的'this'值將是'.push()'方法,它是通用的。它與「價值」沒有永久的關係。 –

回答

0

的values.push應該已經表明,我想它具體的數值數組

都能跟得上英寸

書寫values.push(...)會將values作爲this的參數傳遞給push()
這是push()知道該推入什麼的唯一途徑。

如果使用apply()來校準,則需要明確地將values作爲this

換言之,功能values.push,[].pushArray.prototype.push之間沒有區別。