用于设置实例属性的 ES6 类构造函数快捷方式

新手上路,请多包涵

我似乎记得看到一个快捷方式,如果属性和构造函数参数被命名为相同的东西,你不必在构造函数中执行 this.foo 赋值 - 但我似乎无法找到它的参考谷歌搜索。

例如:

 class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

你能不能做类似的事情

class Polygon {
  constructor(height=height, width=width) {
     // wasn't there a way to declare these arguments so it auto sets the instance variables?
  }
}

原文由 MonkeyBonkey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 373
2 个回答

如果您喜欢这种事情,您可能会定义一个执行此操作的超类:

 class BaseClass {
  constructor(names = [], values = []) {
    names.forEach((n, idx) => this[n] = values[idx]);
  }
}

class Polygon extends BaseClass {
  constructor(height, width) {
    super(['height', 'width'], arguments);
  }
}

当然,你是否应该这样做是值得商榷的,但这是可能的。请注意,由于可能存在缩小问题,我们不能依赖构造函数中参数名称的名称。

原文由 Ovidiu Dolha 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以将其更改为:

 class Polygon {
  constructor(height, width) {
    Object.assign(this, { height, width })
  }
}

这意味着您传递一个单一对象而不是多个参数

原文由 Dan Gamble 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题