我想构建一个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');
});
答案 0 :(得分:1)
类属性不是本地处理的。到目前为止,它们已经通过babel的plugin-proposal-class-properties
进行了转换。
如果此插件将类属性转换为值,并在 被调用后初始化constructor()
,则您无能为力。
我在他们的github中found an issue明确声明了这种方法:
是的。在调用
super()
之前无法完成此操作,因为这是super的返回值。以前,它不存在,所以无法定义类字段。
[UPD]规范在这里:tc39proposal-class-fields,但我没有发现信息是否建议在本机实现中采用这种方法。