如何将一个 class 的属性复制到 javascript 中的另一个,包括方法

How to copy properties of one class to another in javascript, including methods

我有两个 类 A 和 B,它们彼此独立工作,但有时我想将它们创建在一起,以便 A 中的函数调用 B 中的函数。这可以很容易地完成从 A 扩展 B 并因此覆盖方法,但这不允许我独立于 A 创建 B。 相反,我想复制所有的属性和方法。我试过使用 Object.assign 下面的例子说明了这个问题。

class A {
    myFunc() {
        throw 'I have not been created yet'
    }   
}
class B {
    myFunc() {
        console.log(`it's all good now!`)
    }
}

let a = new A();
let b = new B();
Object.assign(a, b)

// explicitly copying the method works
//a.myFunc = b.myFunc;

a.myFunc();

问题是:有没有办法在不明确执行的情况下复制所有方法?

可以遍历B的原型的属性个名字,按照以下方式赋值给a的实例,不包括构造函数:

class A {
    myFunc() {
        throw 'I have not been created yet'
    }   
}
class B {
    myFunc() {
        console.log(`it's all good now!`)
    }
}


let a = new A();
let b = new B();
//Object.assign(a, b)

for (const prop of Object.getOwnPropertyNames(B.prototype).filter(prop => prop !== "constructor"))
  a[prop] = B.prototype[prop]

// explicitly copying the method works
//a.myFunc = b.myFunc;

a.myFunc();