javascript - es6扩展已经定义的类

标签 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 { ... }

但是,我仍然希望能够在定义后使用 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/

相关文章:

javascript - 将 ES6 与 gulp 一起使用

javascript - 正确推送到已作为 props 传递的数组

iphone - 我们有什么理由不使用 UIImageView 的子类吗?

ios - UITableViewCell 子类

JavaScript 动态创建和填充数组

JavaScript 单例模式和 'this'

javascript - 第一个 jQuery 插件 - 如何以正确的方式保存关联元素数据?

javascript - 通过 React Native 函数传递 Promise

java - ClassOne 中的 doSomething() 无法实现 InterfaceOne 中的 doSomething(),尝试分配较弱的访问权限,已公开

javascript - 在不使用 HTML 的情况下对字符串中的换行符进行编码