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)
所以我在想,既然我们现在有了语法糖,我们如何将它用于上面的例子?
编辑
我在这里谈论扩展运算符语法...。
您不能通过this传播然后分配结果来更新。
您可以使用Object.assign()从复制的属性obj来this:
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)