繁体   English   中英

类属性:在父构造函数中访问子类属性

[英]Class properties: Access child class properties in parent constructor

我想构建一个ES6类,该类可以在构造函数级别上读取其子属性。 换句话说,我希望此规格通过:

class Collection {
  model = 'model';

  constructor() {
    // I JUST DO A SIMPLE ASSIGNMENT HERE
    // BUT IN THE FINAL VERSION I WOULD
    // LIKE TO DO SOME MORE ADVANCED
    // CALCULATIONS HERE
    this.modelCopy = this.model;
  }

  getModel() {
    return this.model;
  }
}

class MyCollection extends Collection {
  model = 'myModel';
}

it('this is passing', () => {
  expect(new Collection().getModel()).toBe('model');
  expect(new MyCollection().getModel()).toBe('myModel');
});

it('this is NOT passing', () => {
  expect(new Collection().modelCopy).toBe('model');
  // this fails because new MyCollection().modelCopy === 'model'
  expect(new MyCollection().modelCopy).toBe('myModel');
});

类属性不是本地处理的。 到目前为止,它们已通过babel的plugin-proposal-class-properties

如果此插件将类属性转换为值, 然后在 constructor()被调用初始化则您无能为力。

我在他们的github中发现了一个明确说明此方法的问题:

是。 调用super()之前无法完成,因为这是super的返回值。 以前,这不存在,因此无法定义类字段。

[UPD]规范在这里: tc39proposal-class-fields,但是我没有发现有关是否建议在本机实现中采用这种方法的信息。

正如我在另一个问题中回答的那样,您可以使用setTimeout毫无delay在父级的构造函数中获取子级的属性值,但是您必须小心。 请阅读完整答案,以了解我在说什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM