Вызовите конструктор JavaScript, используя массив для аргументов - PullRequest
0 голосов
/ 08 июня 2018

У меня есть функция конструктора в JavaScript, как показано ниже, и я хочу предоставить аргументы конструктора из массива:

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

Теперь я хочу, чтобы аргументы конструктора были предоставлены из массива:

var dataArray = new Array();

dataArray("Value1","Value2","Value3","Value4","Value5","Value6"...........) 

Я хочу (значение1, значение2, значение3, значение4, значение5) заполнить эту часть из моих dataArray.

1 Ответ

0 голосов
/ 08 июня 2018

В современных условиях вы можете использовать расширенную нотацию :

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...