gpt4 book ai didi

javascript - 检测 ES6 类中的静态超方法

转载 作者:行者123 更新时间:2023-12-03 00:24:23 27 4
gpt4 key购买 nike

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

我需要:

  • 检测父类(super class)的存在
    • 调用 super.id() 然后附加我自己的 id()
  • 如果没有 super,只需发送我自己的 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类的原型(prototype)。但是 this 与您需要原型(prototype)的对象完全匹配,因此使用 Object.getPrototypeOf(this).id 您可以通过原型(prototype)链获得一个很好的冒泡。

关于javascript - 检测 ES6 类中的静态超方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com