调用带有参数字典的类的构造函数

时间:2018-12-26 04:40:36

标签: javascript ecmascript-6

我有一个类,该类的构造函数需要三个参数。我代码中的一个函数有一个字典,其中的键是参数的确切名称,而值是它们的值。有没有一种方法可以使用此字典来调用构造函数,以使键自动匹配?还是将每个值手动放入构造函数参数的唯一解决方案?

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 :(得分:4)

如果可以确保仅使用所需属性调用构造函数,则可以使用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);

答案 1 :(得分:1)

您可以将对象作为参数提供给构造函数

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