使用参数字典调用类的构造函数

bju*_*bes 3 javascript ecmascript-6

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

class ItemDrop {
   constructor(id,x,y){
        this.id = id;
        this.x = x;
        this.y = y;
   }
}
Run Code Online (Sandbox Code Playgroud)

并在另一个文件中

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

澄清一下,我不想跑步

var itemdrop = new ItemDrop(params['id'],params['x'],params['y'])
Run Code Online (Sandbox Code Playgroud)

除非没有更干净的选项,因为我将对许多不同的类多次执行类似的操作。

Cer*_*nce 5

如果保证仅使用所需的属性调用构造函数,则可以使用将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);
Run Code Online (Sandbox Code Playgroud)

为了将三个参数保留给构造函数,无法将每个属性名称重复两次,并且必须对属性进行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);
Run Code Online (Sandbox Code Playgroud)