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