如何使用扩展语法或解构为“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.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 }
所以我在想,既然我们现在有了语法糖,我们如何将它用于上面的示例?
编辑
我在这里谈论传播 运算符 语法 ...
。
您不能通过展开然后分配结果来更新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));
我知道我们可以这样做:
const a = { b: 1, c: 2 }
const A = { ...a };
// A { b: 1, c: 2 }
但是我们如何使用这种方法将数据传递到 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 }
所以我在想,既然我们现在有了语法糖,我们如何将它用于上面的示例?
编辑
我在这里谈论传播 运算符 语法 ...
。
您不能通过展开然后分配结果来更新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));