使用参数数组调用 JavaScript 构造函数

Kum*_*hak 5 javascript constructor

我在 JavaScript 中有一个构造函数,如下所示,并希望从数组中提供构造函数参数:

 function dataRow(value1, value2, value3, value4, value5) {
                this.val1 = value1;
                this.val2 = value2;
                this.val3= value3;
                this.val4 = value4;               
                this.val5 = value5;
}
Run Code Online (Sandbox Code Playgroud)

现在我想要从数组提供的构造函数参数:

var dataArray = new Array();

dataArray("Value1","Value2","Value3","Value4","Value5","Value6"...........) 
Run Code Online (Sandbox Code Playgroud)

我希望 (value1, value2, value3, value4, value5) 这部分从我的dataArray.

T.J*_*der 5

在现代环境中,您可以使用扩展符号

var row = new dataRow(...dataArray);
Run Code Online (Sandbox Code Playgroud)

var row = new dataRow(...dataArray);
Run Code Online (Sandbox Code Playgroud)

在较旧的环境中,这样做真的很痛苦。在您的具体情况下,可能只是以艰难的方式去做:

dataRow(dataArray[0], dataArray[1], dataArray[2], dataArray[3], dataArray[4]);
Run Code Online (Sandbox Code Playgroud)

或者您可以将创建与调用分开,并使用以下命令调用它Function#apply

var row = Object.create(dataRow.prototype);
dataRow.apply(row, dataArray);
Run Code Online (Sandbox Code Playgroud)

function dataRow(v1, v2, v3, v4, v5) {
  this.v1 = v1;
  this.v2 = v2;
  this.v3 = v3;
  this.v4 = v4;
  this.v5 = v5;
}

var dataArray = [1, 2, 3, 4, 5];
var row = new dataRow(...dataArray);
console.log(row.v1);
console.log(row.v2);
console.log(row.v3);
console.log(row.v4);
console.log(row.v5);
Run Code Online (Sandbox Code Playgroud)

这不适用于通过创建的构造函数class,但如果您通过创建它class,请使用扩展符号;它们是同时引入的(ES2015)。


不过,我建议要这样做,尤其是考虑到您在下面的评论

...如何动态创建 this.val1 = value1; this.val2 = value2; this.val3= value3;...

相反,使用单个数组属性,并传入一个您保留或复制的数组:

dataRow(dataArray[0], dataArray[1], dataArray[2], dataArray[3], dataArray[4]);
Run Code Online (Sandbox Code Playgroud)