我有一个基类和一个子类。我希望我的类类型具有通过字符串标识它的静态方法。 (因此,我可以在对象中查找类型的处理程序。我可以将类直接粘贴在其中,但是可以将类的整个源转换为字符串并将其用作键,这似乎是次优的。)
我需要:
检测超类的存在
呼叫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())
我可以在
static id() {}
中定义一个YY
方法,但随后必须在所有容易出错的子类中手动进行操作。这样的事情可能吗? 最佳答案
您可以使用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
可以很好地遍历原型链。关于javascript - 在ES6类中检测静态 super 方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54158257/