javascript - 如何使用扩展语法或解构为 `this` 值?

标签 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 }

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

编辑

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

最佳答案

您不能通过展开然后分配结果来更新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));

关于javascript - 如何使用扩展语法或解构为 `this` 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347983/

相关文章:

javascript - babel 编译的 ES6 中的 block 作用域

java - 嵌入方法参数表达式是不好的做法吗?

javascript - 我的代码给我一条错误消息 : GetElementById() is null or not an object

javascript - 传单中带有 geoJson 文件的 Font Awesome 图标

javascript - 将 forEach 循环输出到 innerHTML

javascript - 使用 ES6 JavaScript 类动态初始化实例

每个用户的 c# 策略模式

java - 将多个注释与参数合并

javascript - 使用谷歌云函数出现语法错误问题

javascript - 使用 jQuery 在按钮单击上添加值