在ES6中继承静态方法

时间:2015-04-03 21:04:42

标签: ecmascript-6

使用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);

1 个答案:

答案 0 :(得分:20)

根据spec herehere 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

Here is the es6fiddle