Javascript 基于另一个类的构造函数生成新类

Javascript 基于另一个类的构造函数生成新类,javascript,es6-class,Javascript,Es6 Class,有没有办法重用现有ES6类的构造函数来生成另一个类?(请原谅我没有OOP短语)我想要实现的是,在运行时生成新类,合并已经初始化的类,就像mixin,但以动态方式。以下是我的成就: function A(value){ this.a = value; } A.prototype.doA = function() { console.log(this.a); } class B { constructor(value){ this.b = value

有没有办法重用现有ES6类的构造函数来生成另一个类?(请原谅我没有OOP短语)我想要实现的是,在运行时生成新类,合并已经初始化的类,就像mixin,但以动态方式。以下是我的成就:

function A(value){
    this.a = value;
}
A.prototype.doA = function() {
        console.log(this.a);
}

class B {
    constructor(value){
        this.b = value;
    }
    doB() {
        console.log(this.b);
    }
}

function morphed(OldClass){
    
    let newClass = function(){
        // ----------------------
        // this throws an error on "B"
        OldClass.prototype.constructor.call(this, ...arguments)
        // ----------------------
        
        this.c = 1;
    }

    const newPrototype = { doC: function(){ console.log(this.c) } }
    newClass.prototype = Object.assign({}, OldClass.prototype, newPrototype);

    return newClass;
} 

const C = morphed(A);
const c = new C('123');
我知道,这个例子完全丢失了A或B的继承函数,但这对于我的用例来说没关系。使用基于函数的类“A”,一切正常,但当我尝试访问“B”的构造函数时,我得到一个错误:

Cannot call a class as a function
如何访问已存在类的构造函数作为函数

更新: 对于那些提出要求的人来说,目标是注入类似于继承的东西,但不改变初始类。类似于mixin,但在运行时生成,因此可以链接多个类。也许这可以更好地解释:

const el = scrollable(draggable(collapsable(document.querySelector('.class') )));

const collapsable = function(el){
    if(!el.isInitialized)
        return new Collapsable(el);
    else{
        return injectPrototypeIntoPrototypeChain(el, Collapsable);
    }
}
更新2: 好的,这是我最后一次尝试:也许这只是我对JS原型链的误解,不知何故我认为这应该是可能的:(变量名是独立于前面的代码片段选择的)

我所有的尝试都以巴贝尔告诉我“不能将类作为函数调用”或覆盖实例的原型链而告终。也许我最初的问题应该是 如何将实例化对象的原型链附加到具有自己的原型链的新对象


@Bergi事实上,这混淆了类和实例级别。我对流行的“mixin”模式的问题是,单个属性可能会被覆盖,而且(据我所知)很难对Object.assign进行操作,即使用具有5层继承性的对象。

如果要继承,请使用
class newClass Extendes OldClass{…}
。如果您只想使用构造函数,这是不容易做到的,而且无论如何也不应该这样做。请查看和以及解决方法。示例代码中的
newPrototype
Class
是什么?它们在任何地方都没有定义。感谢@Bergi提供的链接,还更正了code@Schnurbert,我想你是在寻找遗产?您的用例是什么?