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

Yon*_*uan 1 javascript code-structure ecmascript-6

我知道我们可以这样做:

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

const A = { ...a };
// A { b: 1, c: 2 }
Run Code Online (Sandbox Code Playgroud)

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

例如我们有一个class A {}并且想要动态地将对象属性设置为this. 通常的方法是使用Object.defineProperties可能for...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 }
Run Code Online (Sandbox Code Playgroud)

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

编辑

我在这里谈论扩展运算符语法...

Ori*_*ori 5

您不能通过this传播然后分配结果来更新。

您可以使用Object.assign()从复制的属性objthis

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

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

console.log(new A(a));
Run Code Online (Sandbox Code Playgroud)

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

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

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

console.log(new A(a));
Run Code Online (Sandbox Code Playgroud)