首页 > 解决方案 > 在 JS 中隐式使用重写的静态方法

问题描述

假设我有两个课程,A并且B. B延伸A. 它们看起来有点像这样:

class A {
    localFunction() {
        return a.staticMethod();
    }

    static staticMethod() {
        return true;
    }
}
class B extends A {
    static staticMethod() {
        return false;
    }
}

所以我可以创建一个新的类实例A

const newA = new A();

然后调用将按预期newA.localFunction()返回。true但是当我创建一个新的类实例时B

const newB = new B();

然后调用newB.localFunction()我仍然得到true,因为该函数localFunction从未重新定义。

我希望localFunctionB中使用类中定义的静态函数,B但是我不想重新定义它。

标签: javascriptfunctionoopinheritancestatic

解决方案


我实际上已经为我的问题制定了一个干净的解决方案。

只需使用this.constructor而不是类名调用静态函数

class A {
  localFunction() {
    return this.constructor.staticMethod();
  }

  static staticMethod() {
    return true;
  }
}

this.will 允许类B覆盖静态方法并以相同的方式调用它。


推荐阅读