[英]Cannot use child class' properties within parent class constructor via Babel's transform-class-properties
[英]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.