2017-08-19 38 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']); 

上面的代码管理所有4个必需的参数传递给我的customProcessor方法,但下面的线是不是最可读的意图方面:

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

'[阿尔加,ARGB,... cbArgs]' – ASDFGerte

+0

@ASDFGerte - 谢谢!你会介意回答,所以我可以将其标记为正确答案吗? – pulkitsinghal

回答

2

使用spread syntax

[arga, argb, ...cbArgs]

注意,这也直接作用于函数调用,免去apply(如果你不需要一个明确的this),例如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']);

相关问题