В современных условиях вы можете использовать расширенную нотацию :
var row = new dataRow(...dataArray);
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);
В старых условиях делать это очень сложно.В вашем конкретном случае, вероятно, просто сделайте это трудным способом:
dataRow(dataArray[0], dataArray[1], dataArray[2], dataArray[3], dataArray[4]);
Или вы можете отделить создание от вызова и вызвать его с помощью Function#apply
:
var row = Object.create(dataRow.prototype);
dataRow.apply(row, dataArray);
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 = Object.create(dataRow.prototype);
dataRow.apply(row, dataArray);
console.log(row.v1);
console.log(row.v2);
console.log(row.v3);
console.log(row.v4);
console.log(row.v5);
Это не сработает с конструктором, созданным с помощью class
, но если вы создаете его с помощью class
, используйте нотацию распространения;они были введены в одно и то же время (ES2015).
Я бы предложил не , хотя, особенно в свете вашего комментария ниже :
... как создать это динамически this.val1 = value1;this.val2 = value2;this.val3 = value3; ...
Вместо этого используйте одно свойство массива и передайте массив, который вы либо сохраните, либо скопируете:
function dataRow(values) {
this.values = values;
// or: this.values = values.slice();
// to make a shallow copy
}
var dataArray = [1, 2, 3, 4, 5];
var row = new dataRow(dataArray);
console.log(row.values);