2016-04-19 39 views
0

我試圖在javascript中使用concat()方法來連接兩個數組。我不知道是什麼這兩種情況使用調用方法的javascript concat

var a = [1, 2, 3]; 
console.log(Array.prototype.concat.call(a, [4, 5, 6])); 
// Result: [1, 2, 3, 4, 5, 6] 

console.log(Array.prototype.concat(a, [4, 5, 6])); 
// Result: [1, 2, 3, 4, 5, 6] 

我想用call方法,因爲我們傳遞this對象作爲第一個參數之間的差異,這將改變陣列a。但事實並非如此。

+0

'concat'不會改變任何東西,它會返回一個新的數組。不知道你想要做什麼。 – Bergi

+0

@Bergi感謝您的回覆..在他們使用call()的mozilla文檔中使用concat。我試圖瞭解什麼是call()這裏的用例。當你可以在沒有調用的情況下實現同樣的事情() –

+0

你引用了哪一個Mozilla文檔?請鏈接它。當'a'不是一個數組並且本身沒有'concat'方法時,'call'通常是必需的。 – Bergi

回答

2

Array.prototype.concat.call(a, [4, 5, 6])

相當於a.concat([4, 5, 6])(假設a.concat === Array.prototype.concat,這是你的例子a instanceof Array的情況下)。

Array.prototype.concat(a, [4, 5, 6])

相當於Array.prototype.concat.call(Array.prototype, a, [4, 5, 6])

鑑於Array.prototype是一個空數組,兩者都產生相同的結果。 [].concat(a, [4, 5, 6])Array.prototype.concat.call([], a, [4, 5, 6])也是如此。

2

Array.prototype.concat返回一個新的數組。所以Array.prototype.concat(a, [4, 5, 6])Array.prototype.concat.call(a, [4, 5, 6])實際上是做同樣的事情。如果你想改變原來的數組,你應該使用Array.prototype.push.apply(a, [4, 5, 6])