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

时间:2018-11-17 03:43:52

标签: javascript ecmascript-6 code-structure

我知道我们可以做类似的事情:

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 }

所以我在想,既然我们现在有了语法糖,那么如何在上面的示例中使用它呢?

编辑

我在这里谈论的是传播 operator 语法...

1 个答案:

答案 0 :(得分:4)

您无法通过传播然后分配结果来更新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));