es6扩展已定义的类

时间:2016-11-24 07:14:08

标签: javascript ecmascript-6 subclass

我有一个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添加到一个类(我知道我不能),所以找出一些方法。

1 个答案:

答案 0 :(得分:1)

您可以通过设置子类原型的原型,使现有类从其他类“继承”。听起来有点复杂,所以只需要:

class Base {}
class Child {}

Object.setPrototypeOf(Child.prototype, Base.prototype)

然而,有一个问题:Child的实现并不是为了从另一个类继承 - 例如,Base构造函数正在做一些重要的工作(很多时候是父构造函数)做一些初始化步骤)这不会被称为,这意味着你可能会遇到各种各样的错误。

在您描述的上下文中,没有可行的解决方案以编程方式扩展类确保调用父类的构造函数。这是因为没有办法“修补”子类的构造函数来实际调用父类的构造函数。

您可能想要覆盖Child.prototype.constructor属性并在那里修补它,但问题是当您执行new Child()这不是所谓的,它就是Child函数本身 - 构造函数属性在此过程中不起作用。