小题一道——类的继承中的super

123 阅读1分钟

小题一道

今天的题目灵感来自于阮一峰老师的ECMAScript 6 入门

class Parent {
    static _test = 123; //父类的(静态)属性
    _test = 456// 父类实例对象的属性
    //父类的(静态)方法
    static myMethod(msg) {
        console.log("static", msg);
    }
    //父类原型对象上的方法
    myMethod(msg) {
        console.log("instance", msg);
    }
}

class Child extends Parent {
    static myMethod(msg) {
        console.log(super._test);
        super.myMethod(msg);
    }

    myMethod(msg) {
        console.log(super._test);
        super.myMethod(msg);
    }
}

Child.myMethod(1); // 123 static 1

const child = new Child();
child.myMethod(2); // undefined instance 2

super在静态方法之中指向父类,在普通方法之中指向父类的原型对象。

Child类普通方法中的super指的是父类Parent的原型对象, 而_test = 456Parent的实例对象的属性。

试着在代码中加上Parent.prototype._test = 666;
再次调用child.myMethod(2);