あなたはES2015だけではなく、シムを使用している場合は、スプレッド表記を使用することができ、Array.from
、およびslice
:
function composeObj(objs) {
return Object.assign(...Array.from(arguments).slice(1));
}
それともslice
を使用して、直接ではなく、Array.from
後:
function composeObj(objs) {
return Object.assign(...Array.prototype.slice.call(arguments, 1));
}
...残りのargsを使用してThomas' answerを参照してください。これはES2015でこれを行う正しい方法です。 (ES5およびそれ以前以来あり
function composeObj(objs) {
return Object.assign.apply(Object, Array.prototype.slice.call(arguments, 1));
}
、我々は代わりに広がりオペレータのFunction#apply
を使用している:あなたはES2015を使用していない場合
は、あなただけのシムObject.assign
apply
経由で同じことを行うことができますスプレッドオペレータを持たない)。 Function#apply
は、呼び出し中に最初の引数をthis
として呼び出し、配列(または配列のようなもの)を呼び出しの引数として2番目の引数として使用して呼び出す関数を呼び出します。
あなたが持っていると言う:
obj.foo(1, 2, 3);
同等Function#apply
を使用すると、次のとおりです。
obj.foo.apply(obj, [1, 2, 3]);
最初の引数、obj
、通話中にthis
として使用するものをapply
を伝えます。 2番目の引数は、使用する引数の配列です。
拡散演算子を使用する場合は、配列のようなオペランドを離散引数に展開する必要はありません。
'arguments'はfunctionに渡される引数の配列なので、すでに2番目の引数を渡しています。 – itzmukeshy7
@ itzmukeshy7:配列ではなく、配列に似ています(これは質問に関連しています)。しかし、私はその例が彼らがしたいことの概念を示すことに過ぎないと思う。問題は、引数の数が可変であることです。 –
@ le-moi 'arguments'は、引数がすべて渡された特別な配列です。 – itzmukeshy7