从常规 ES6 类方法调用静态方法

新手上路,请多包涵

调用静态方法的标准方法是什么?我可以考虑使用 constructor 或使用类本身的名称,我不喜欢后者,因为它没有必要。前者是推荐的方式,还是有其他方式?

这是一个(人为的)示例:

 class SomeObject {
  constructor(n){
    this.n = n;
  }

  static print(n){
    console.log(n);
  }

  printN(){
    this.constructor.print(this.n);
  }
}

原文由 simonzack 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 429
1 个回答

这两种方式都是可行的,但是当涉及到使用重写的静态方法进行继承时,它们会做不同的事情。选择您期望其行为的行为:

 class Super {
  static whoami() {
    return "Super";
  }
  lognameA() {
    console.log(Super.whoami());
  }
  lognameB() {
    console.log(this.constructor.whoami());
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}
new Sub().lognameA(); // Super
new Sub().lognameB(); // Sub

通过类引用静态属性实际上是静态的,并且不断地给出相同的值。使用 this.constructor 将使用动态分派并引用当前实例的类,其中静态属性 可能 具有继承值但也可以被覆盖。

这符合 Python 的行为,您可以选择通过类名或实例 self 来引用静态属性。

如果您希望静态属性不被覆盖(并且始终引用当前类中的一个), 就像在 Java 中一样,请使用显式引用。

原文由 Bergi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题