如何使用扩展语法或解构为“this”值?

How to use spread syntax or destructuring into `this` value?

我知道我们可以这样做:

const a = { b: 1, c: 2 }

const A = { ...a };
// A { b: 1, c: 2 }

但是我们如何使用这种方法将数据传递到 this 值中呢?

例如我们有一个 class A {} 并且想要将对象 属性 动态设置为 this。通常的方法是使用 Object.definePropertiesfor...in 循环:

const a = { b: 1, c: 2 }

class A {
  constructor(obj){
    for (const k in obj)
      Object.defineProperty(this, k, { value: obj[k] });
  }
}

new A(a);
// A { b: 1, c: 2 }

所以我在想,既然我们现在有了语法糖,我们如何将它用于上面的示例?

编辑

我在这里谈论传播 运算符 语法 ...

您不能通过展开然后分配结果来更新this

您可以使用 Object.assign() 将属性从 obj 复制到 this:

class A {
  constructor(obj) {
    Object.assign(this, obj);
  }
}

const a = { b: 1, c: 2 }

console.log(new A(a));

您可以使用解构将已知属性分配给 this:

class A {
  constructor(obj) {
    ({ b: this.b, c: this.c } = obj);
  }
}

const a = { b: 1, c: 2 }

console.log(new A(a));