вызывающий конструктор класса со словарем аргументов - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть класс, у которого есть конструктор, требующий три аргумента.Функция в моем коде имеет словарь, ключи которого являются точными именами аргументов, а значения - их значениями.Есть ли способ вызвать конструктор, используя этот словарь, чтобы ключи автоматически совпадали?или это единственное решение для ручного ввода каждого значения в параметры конструктора?

class ItemDrop {
   constructor(id,x,y){
        this.id = id;
        this.x = x;
        this.y = y;
   }
}

и в другом файле

var params = {
    "id" : "2837",
    "x" : 50,
    "y" : 100
}  
var itemdrop = new ItemDrop(params) // how would i do this?

Чтобы уточнить, я не хочу запускать

var itemdrop = new ItemDrop(params['id'],params['x'],params['y'])

, если нет более чистой опции, так как я буду выполнять аналогичную операцию много раз со многими различными классами.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы можете предоставить объект в качестве параметра функции конструктора

constructor({id,x,y}){
         this.id = id;
         this.x = x;
         this.y =y;
    }
0 голосов
/ 26 декабря 2018

Если гарантируется, что конструктор вызывается только с требуемыми свойствами, тогда вы можете использовать Object.assign, чтобы назначить все свойства параметра экземпляру (this):

class ItemDrop {
  constructor(params) {
    Object.assign(this, params);
  }
}

const params = {
  "id": "2837",
  "x": 50,
  "y": 100
}

const instance = new ItemDrop(params);
console.log(instance);

Чтобы сохранить три параметра для конструктора, нельзя повторять каждое имя свойства дважды, и для расширения необходимо будет упорядочить свойства из paramsих в конструктор правильно:

class ItemDrop {
  constructor(id, x, y) {
    Object.assign(this, { id, x, y });
  }
}

const params = {
  "id": "2837",
  "x": 50,
  "y": 100
}

const instance = new ItemDrop(...Object.values(params));
console.log(instance);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...