2016-04-19 21 views
0

私はconcat()メソッドを使用してJavaScriptで2つの配列を連結しようとしています。私は、我々は最初の引数としてthisオブジェクトに渡しているように、call方法を使用して思ったこれら2例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] 

の違いとは何か思ったんだけど、それが配列aを変更します。しかし、それはしませんでした。

+0

'concat'は何も変更しません。新しい配列を返します。あなたが何をしようとしているのか分かりません。 – Bergi

+0

@Bergiあなたの返信をお寄せいただきありがとうございます。それらはmozillaのドキュメントで、彼らはconcat上でcall()を使用していました。私はここでcall()の使用例を理解しようとしています。電話なしで同じことを達成できるときは –

+0

あなたが参照しているMozillaドキュメントはどれですか?それをリンクしてください。 'call'は' a'が配列でなく、 'concat'メソッド自体を持たないときに通常は必要です。 – Bergi

答えて

2

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

は(あなたの例a instanceof Arrayの場合であるa.concat === Array.prototype.concatを、仮定して)a.concat([4, 5, 6])に相当します使用する必要があります。

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])

関連する問題