【发布时间】:2020-02-03 09:26:05
【问题描述】:
我想通过只添加一个新的(非静态)函数来扩展一个类,而不更改构造函数。我的超类只能由静态函数构造。现在,当我使用该静态函数构造子类时,我收到一个作为超类实例的对象,尽管我想要子类。在不更改超类的情况下,我可以做些什么来实现我正在寻找的东西?
这是一个最小的例子:
class MySuperClass {
static staticConstructor() {
return new MySuperClass()
}
}
class MySubClass extends MySuperClass {
addedFunction() {}
}
const mySuperClass = MySuperClass.staticConstructor()
console.log(mySuperClass instanceof MySuperClass) // true
const mySubClass = MySubClass.staticConstructor()
console.log(mySubClass instanceof MySubClass) // false, I want this to be true
console.log(mySubClass instanceof MySuperClass) // true
// calling mySubClass.addedFunction results in an error due to wrong instance
PS:我在这里找不到解决方案,但我很确定应该有一个。每次搜索都会导致一些我显然不想要的 DOM 操作。
【问题讨论】:
-
staticConstructor应该使用return new this() -
该死,我觉得自己很笨。谢谢,有帮助!你知道如何在 Typescript 中正确输入 staticConstructor 的返回值吗?我想这仅对使用泛型或任何方法的子类是正确的?
-
是的,我怀疑你需要泛型。有一些与此相关的 TypeScript 问题,例如github.com/Microsoft/TypeScript/issues/18685
标签: javascript typescript es6-class