es6从父类的静态方法访问子类的静态方法?

时间:2017-12-22 07:05:33

标签: ecmascript-6 es6-class

我想这样做:

class Parent {
    static myMethod1(msg) {
    // myMethod2 is undefined
    this.constructor.myMethod2(msg);
  }
}

class Child extends Parent {
  static myMethod2(msg) {
    console.log('static', msg);
  }
}

Child.myMethod1(1);

但它不起作用。这可能是其他方式吗?我不想在Parent中硬编码Child.myMethod2,我知道它可以工作,因为我希望随机子类能够定义/覆盖静态方法但是从父级调用该方法而不事先知道哪个类是孩子。

1 个答案:

答案 0 :(得分:4)

myMethod2未定义,因为代码错误。 this是静态方法中的类构造函数,this.constructor是构造函数的构造函数,即Function。它应该是:

class Parent {
  static myMethod1(msg) {
    this.myMethod2(msg);
  }
}

这是反模式,因为Parent没有myMethod2Parent.myMethod1()会导致错误。它应该包含no-op myMethod2,或者被标记为抽象类,永远不能直接访问。