如何扩展从 ES6 中的父类继承的类属性?

我有以下代码:


class Parent {

    some_class_property = [1,2,3];


    some_other_methods(){...}

}


class Child extends Parent {

    some_class_property = super.some_class_property.push(4);

}

控制台给我一个语法错误,说关键字super是意外的。


如果 ES6 中允许类属性,那么不允许它在子类中扩展又有什么意义呢?如果这不是正确的方法,那么该怎么做?谢谢。


繁星coding
浏览 102回答 2
2回答

天涯尽头无女友

看起来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();

饮歌长啸

公共和私有属性是处于实验阶段(ES11?)的 Javascript 特性。在 ES6 的过去几年中,人们一直在这样做:class Parent {    constructor(x){        this.property1 = [1,2,3];        ...    }    some_other_methods(){...}}Parent.property2 = [4,5,6];                 // to access: Parent.property1Parent.prototype.property3 = [7,8,9];       // to access: obj.property2class Child extends Parent {    constructor(x){        super(x);        // ...    }    some_other_methods(){...}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript