2 回答
TA贡献1831条经验 获得超9个赞
看起来super类字段中不允许引用,这就是您当前代码抛出错误的原因。
但是,在超类构造函数中将some_class_property放在实例化对象本身上(好吧,在类字段中,这是将它放在超类构造函数中的对象上的有效语法糖),这意味着您可以在子类中引用它参考this.some_class_property. 您没有引用隐藏的方法或属性,因此super不需要:
class Parent {
some_class_property = [1, 2, 3];
}
class Child extends Parent {
some_class_property = this.some_class_property.push(4)
}
const c = new Child();
console.log(c.some_class_property);
还要记住,.push返回数组的新长度,这就是为什么上面代码片段的结果是4. (如果您想复制some_class_property数组,无论出于何种原因,请改用some_class_property = [...this.some_class_property, 4])
使用的时间super是当子实例或子原型上存在属性,但您想引用父原型上的属性时,例如:
class Parent {
method() {
console.log('parent method');
}
}
class Child extends Parent {
method() {
console.log('child method');
}
invokeParentMethod() {
super.method();
}
}
const c = new Child();
c.method();
c.invokeParentMethod();
TA贡献1951条经验 获得超3个赞
公共和私有属性是处于实验阶段(ES11?)的 Javascript 特性。在 ES6 的过去几年中,人们一直在这样做:
class Parent {
constructor(x){
this.property1 = [1,2,3];
...
}
some_other_methods(){...}
}
Parent.property2 = [4,5,6]; // to access: Parent.property1
Parent.prototype.property3 = [7,8,9]; // to access: obj.property2
class Child extends Parent {
constructor(x){
super(x);
// ...
}
some_other_methods(){...}
}
添加回答
举报