javascript - 更改父类(super class)静态构造函数的返回值

标签 javascript typescript es6-class

我想通过仅添加新的(非静态)函数来扩展类,而不更改构造函数。我的父类(super class)只能从静态函数构造。现在,当我使用该静态函数构造子类时,我收到一个作为父类(super 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 操作。

最佳答案

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

关于javascript - 更改父类(super class)静态构造函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60036311/

相关文章:

javascript - 使用 jQuery 注册点击事件 - 不触发

javascript - Reactjs 读取属性文件?

javascript - 为什么 jquery UI 不能正确呈现选择框

javascript - 如何拆分大型 typescript index.d.ts 文件

typescript - 为什么 TypeScript 泛型会抑制类型错误?

javascript - 如何像本示例中使用工厂函数一样使用 es6 类的组合?

javascript - 在 JavaScript 中调用 getter 函数及其名称?

javascript - 如何修改 js 文件并使用 npm 命令保存?

javascript - React Typescript Conversion 问题渲染数据

Javascript 在类构造函数中调用类 (ES6)