首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ES6类中检测静态超级方法

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

Stack Overflow用户
提问于 2019-01-12 09:26:00
回答 1查看 57关注 0票数 0

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

我需要:

  • 检测超类的存在
    • 调用super.id(),然后追加我自己的id()

  • 如果没有超级高手的话,就送我自己的id()

下面是我想要编写的代码,但是super.id没有定义,所以if总是失败的。检查if (super) {}也会作为语法错误失败,而super.id()会失败,因为它“不是函数”。

代码语言:javascript
复制
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()) 

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-12 09:33:35

您可以使用Object.getPrototypeOf而不是super

代码语言:javascript
复制
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,您可以在原型链中得到一个很好的冒泡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54158257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档