如何将一个 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();
我有两个 类 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();