documentを見ずにあなたのことを仮定しています。ビューのあなたのコードの観点から、
Array.prototype.concat ([ item1 [ , item2 [ , … ] ] ])
だからあなたのコードはかろうじてに等しくされ、連結のための実際の構文は、
[].concat.apply([itm1], [itm2,itm3,itm4]...)
を参照してください、あなたのコードは、に似て
[2].concat([99],5,6,[2,3]);
あなたのコードを解体しましょう。
console.log([].concat.apply([2],[[99],5,6,[2,3]]));
// 1. apply will call the function by applying the parameter supplied as an array.
// 2. so the first parameter for apply would be this for that function
// 3. and the second parameter for it would be the arguments in an array form.
// 4. Hence internally apply will call the function concat as,
// [2].concat([99],5,6,[2,3]); //[2] will be 'this'
しかし、あなたの要件のために、あなたはapply
と一緒に行く必要はありません、call
を使用することができます。だ
console.log([].concat.call([2],[[99],5,6,[2,3]]));
//[2,[99],5,6,[2,3]]
値が配列である間に、 'apply'のように見えますが、各引数を繰り返します。しかし、もう少し深い証拠が必要です。 –
両方の文が等価であるために、適用入力のまわりに別の対の括弧がありません。 – plalx
ちょっと@Guedes、いいえ、問題は適用されません。このコードをチェックしてください:function abc(x、y、z){console.log(x、y、z);}ここでabc.apply(this、[3,4、[5]])は3 4 [5]を生成するのに対し、abc.apply(this、[3,4,5])は3 4 5 – Ayan