2017-08-19 9 views
0

は、ここに私の状況に似ているサンプルコードです:別の配列の要素と要素を持つjavascript配列を初期化するにはどうすればよいですか?

var customProcessor = function test1(arga, argb, argc, argd) { 
    console.log('customProcessor', 'arga', arga); 
    console.log('customProcessor', 'argb', argb); 
    console.log('customProcessor', 'argc', argc); 
    console.log('customProcessor', 'argd', argd); 
}; 

var utilityMethod = function test2(arga, argb, someFunc, cbArgs) { 
    console.log('utilityMethod', 'arga', arga); 
    console.log('utilityMethod', 'argb', argb); 
    cbArgs.unshift(argb); 
    cbArgs.unshift(arga); 
    someFunc.apply(this, cbArgs); // INTENT: someFunc(arga, argb, argc, argd); 
}; 

utilityMethod('argA', 'argB', customProcessor, ['argC','argD']); 

上記のコードは、私のcustomProcessor方法にすべての4つの必須の引数を渡すために管理しますが、次の行は、意図の観点から最も読みやすいではありません。

cbArgs.unshift(argb); 
    cbArgs.unshift(arga); 
    someFunc.apply(this, cbArgs); // INTENT: someFunc(arga, argb, argc, argd); 

私は知らないかもしれないJS構文を使って、より自明な方法でそれらを書く方法がありますか?

// not real code 
    someFunc.apply(this, [arga, argb, cbArgs]); 

が、私はこれを達成するための現実的なJSの構文があるかどうかを知る必要があります。ここでは

は、私が読みやすくなります想像してる何ですか?

+1

'[arga、ARGB、... cbArgs]' – ASDFGerte

+0

@ASDFGerte - ありがとう!私は正しい答えとしてマークすることができますので、あなたは答える気になりますか? – pulkitsinghal

答えて

2

spread syntaxを使用します。これはまた、(あなたが明示的にthisを必要としない場合)、例えば、applyを置き換え、関数呼び出しに直接動作することを

[arga, argb, ...cbArgs]

注意をsomeFunc(arga, argb, ...cbArgs)

+0

はい、あなたはもう一度正しいです! 'someFunc.apply(this、[arga、argb、... cbArgs]);'または 'someFunc(arga、argb、... cbArgs);' – pulkitsinghal

+0

@pulkitsinghalブラウザの両方のタブを必ず確認してくださいIEや一部の古いバウザーではサポートされていないため、サポートセクションはhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility – Slai

1

function customProcessor(a, b, c, d) { 
 
    console.log('customProcessor:', a, b, c, d); 
 
}; 
 

 
function utilityMethod(arga, argb, someFunc, cbArgs) { 
 
    console.log('utilityMethod :', arga, argb); 
 
    someFunc(arga, argb, cbArgs[0], cbArgs[1]); 
 
    // or 
 
    someFunc.apply(this, [arga, argb].concat(cbArgs)); 
 
}; 
 

 
utilityMethod('argA', 'argB', customProcessor, ['argC','argD']);

関連する問題