更改 super class' 静态构造函数的 return 值

Change return value of super class' static constructor

我想通过仅添加一个新的(非静态)函数而不更改构造函数来扩展 class。我的 super class 只能从静态函数构造。现在,当我用那个静态函数构造我的 sub class 时,我收到一个对象,它是 super class 的一个实例,尽管我想要 sub class。在不改变 super class?

的情况下,我可以做些什么来实现我正在寻找的东西

这是一个最小的例子:

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 操纵,而我显然不想要这些操纵。

您的问题是由于您的静态构造函数总是 return SuperClass 的一个实例,无论您创建什么子类。对于第二个 console.log 到 return true,您需要将静态构造函数代码替换为 return new this()