繁体   English   中英

在ES6类中检测静态超级方法

[英]Detect static super method in ES6 class

我有一个基类和一个子类。 我希望我的类类型具有通过字符串标识它的静态方法。 (因此,我可以在对象中查找类型的处理程序。我可以将类直接粘贴在其中,但是可以将类的整个源转换为字符串并将其用作键,这似乎是次优的。)

我需要:

  • 检测超类的存在
    • 调用super.id()然后附加我自己的id()
  • 如果没有超级,只需发送我自己的id()

这就是我想象的要编写的代码,但是super.id是未定义的,因此if总是失败。 检查if (super) {}还会因为语法错误而失败,而super.id()因为它不是“函数”而失败。

class Y {
  static id() {
    if (super.id) {
      return `${super.id()}-${this.name}`;
    }
    else {
      return this.name;
    }
  }
}

class YY extends Y {}

// Outputs "Y YY", but I want "Y Y-YY"
console.log(Y.id(), YY.id()) 

我可以在YY定义一个static id() {}方法,但随后必须在所有容易出错的子类中手动进行此操作。 这样的事情可能吗?

您可以使用Object.getPrototypeOf代替super

 class Y { static id() { if (Object.getPrototypeOf(this).id) { return `${Object.getPrototypeOf(this).id()}-${this.name}`; } else { return this.name; } } } class YY extends Y {} console.log(Y.id(), YY.id()) 

对于super它不起作用,因为它始终是指Y类的原型。 但是, this完全符合你需要的原型对象,因此与Object.getPrototypeOf(this).id你打通原型链一个不错的起泡了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM