Наследовать статические методы в ES6

Используя синтаксис ES6, можно ли расширить класс и наследовать его статические методы? И если да, можем ли мы назвать супер в статическом методе подкласса?

Пример:

class Parent {
  static myMethod(msg) {
    console.log(msg)
  }
}

class Child extends Parent {
  static myMethod() {
    super("hello")
  }
}

Child.myMethod();  // logs "hello" 

Это дает мне вызов метода без неопределенной ошибки в моем транспилере (Reactify).

____SuperProtoOfParent.open.call(this);

Ответы

Ответ 1

Согласно спецификации здесь и здесь 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

Вот es6fiddle