我有一个Base
班级
class Base {
constructor() {
console.log('should get called')
}
}
和Target
类
class Target {
someFn() {
// does something
}
}
我想在定义后Target
扩展Base
。我的意思是,我知道我可以简单地执行以下操作
class Target extends Base { ... }
但是,我仍然希望能够在Target
定义后Base
扩展{。}}。
我尝试了几种方法,但并不完全满意。这可能吗?
我可以做class Base extends Target {}
但是它不再是同一个类了。
我的基本目标是;我想将constructor
添加到一个类(我知道我不能),所以找出一些方法。
答案 0 :(得分:1)
您可以通过设置子类原型的原型,使现有类从其他类“继承”。听起来有点复杂,所以只需要:
class Base {}
class Child {}
Object.setPrototypeOf(Child.prototype, Base.prototype)
然而,有一个问题:Child
的实现并不是为了从另一个类继承 - 例如,Base
构造函数正在做一些重要的工作(很多时候是父构造函数)做一些初始化步骤)这不会被称为,这意味着你可能会遇到各种各样的错误。
在您描述的上下文中,没有可行的解决方案以编程方式扩展类和确保调用父类的构造函数。这是因为没有办法“修补”子类的构造函数来实际调用父类的构造函数。
您可能想要覆盖Child.prototype.constructor
属性并在那里修补它,但问题是当您执行new Child()
时这不是所谓的,它就是Child
函数本身 - 构造函数属性在此过程中不起作用。