javascript - 更改超类的静态构造函数的返回值
问题描述
我想通过仅添加一个新的(非静态)函数来扩展一个类,而不更改构造函数。我的超类只能由静态函数构造。现在,当我使用该静态函数构造子类时,我收到一个作为超类实例的对象,尽管我想要子类。在不改变超类的情况下,我能做些什么来实现我正在寻找的东西?
这是一个最小的例子:
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()
推荐阅读
- python - django注释是否存在
- python - forcing a creation of 1d numpy array from a list/array of possibly iterable objects
- android - 开始任何新活动时出现 ClassNotFoundException
- bash - 参数扩展默认值为空数组
- python - 在 Django REST 框架中重构视图
- regex - 正则表达式在循环内匹配 Google 脚本?
- ionic-framework - Ionic 4 操作表:访问其他组件中的返回值
- spacy - spaCy 是否支持命名实体识别的自定义类型?
- excel - 如何修复我的代码以将其应用于所有工作表?
- python - 在“tbody”中仅打印一个“tr”标签 - Beautifulsoup