使用ES6语法是否可以扩展类并继承其静态方法?如果是这样,我们可以在子类的静态方法中调用super吗?
示例:
class Parent {
static myMethod(msg) {
console.log(msg)
}
}
class Child extends Parent {
static myMethod() {
super("hello")
}
}
Child.myMethod(); // logs "hello"
在我的转换器(Reactify)中,这给我一个no方法调用未定义的错误。
____SuperProtoOfParent.open.call(this);
答案 0 :(得分:20)
根据spec here和here super
对当前this
对象原型的基本引用。在静态方法中,它将引用继承的类。因此,要调用父静态方法,您必须调用super.myMethod('some message')
。这是一个例子:
class Parent {
static myMethod(msg) {
console.log('static', msg);
}
myMethod(msg) {
console.log('instance', msg);
}
}
class Child extends Parent {
static myMethod(msg) {
super.myMethod(msg);
}
myMethod(msg) {
super.myMethod(msg);
}
}
Child.myMethod(1); // static 1
var child = new Child();
child.myMethod(2); // instance 2