首页 > 解决方案 > 更改超类的静态构造函数的返回值

问题描述

我想通过仅添加一个新的(非静态)函数来扩展一个类,而不更改构造函数。我的超类只能由静态函数构造。现在,当我使用该静态函数构造子类时,我收到一个作为超类实例的对象,尽管我想要子类。在不改变超类的情况下,我能做些什么来实现我正在寻找的东西?

这是一个最小的例子:

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 操作。

标签: javascripttypescriptes6-class

解决方案


您的问题是由于您的静态构造函数将始终返回 SuperClass 的实例,无论您可能创建什么子类。为了让您的第二个console.log返回 true,您需要将静态构造函数代码替换为return new this()


推荐阅读