在JS中隐式使用重写的静态方法

时间:2019-07-13 04:19:35

标签: javascript function oop inheritance static

说我有两个班,ABB扩展了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从未被重新定义。

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

2 个答案:

答案 0 :(得分:0)

  

static关键字为类定义了静态方法。静态方法   不会在类的实例上调用。相反,他们被要求   类本身。这些通常是实用程序功能,例如功能   创建或克隆对象。

static

cmd1

答案 1 :(得分:0)

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

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

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

  static staticMethod() {
    return true;
  }
}

此操作将允许类B覆盖静态方法并以相同的方式调用它。