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

时间:2018-12-21 08:50:16

标签: javascript ecmascript-next

我想构建一个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');
});

1 个答案:

答案 0 :(得分:1)

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

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

我在他们的github中found an issue明确声明了这种方法:

  

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

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