【发布时间】:2018-12-26 16:24:08
【问题描述】:
我找不到此问题的解决方案。我整天都在用头撞墙。
假设我们有以下类的层次结构:
class A {
async name() { ... }
}
class B extends A {
async age() { ... }
}
class C extends A {
async group() { ... }
}
class D extends B {
constructor() {
super(...)
this.C = new C(...);
}
async group() { return await this.C.group(); }
}
因为 JavaScript 不支持多重继承,我有一个问题。我想以一种我可以调用函数group() 的方式组合对象的原型,而无需像上面那样编写重复的代码。绝对必须能够在类外部的对象 D 上直接调用 group(),即使它是 class C 的一个实例。
如何组合他们的原型?我尝试过类似
class A {
appendPrototype(obj) {
if (obj instanceof A)
for (let k in obj.__proto__) {
this.__proto__[k] = obj.__proto__[k];
}
}
}
.
.
. // Same two classes, B and C
class D extends B {
constructor(...) {
super(...);
const c = new C(...);
this.appendPrototype(c);
}
}
我无法调用函数group() 一个class D 的实例。这是为什么?我怎样才能实现它,而不像第一个示例那样编写重复的代码?
【问题讨论】:
-
@deceze 这并不能完全解决我的问题。我需要为每个对象调用构造函数,它们的参数不同。
标签: javascript function oop prototype