Я не смог найти решение этой проблемы.Я бьюсь головой об стену весь день.
Предположим, у нас есть следующая иерархия классов:
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()
без необходимости написания повторяющегося кода, как описано выше.Абсолютно необходимо иметь возможность вызывать group()
непосредственно на объекте D вне класса, даже если это экземпляр 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
.Это почему?Как я могу достичь этого, без написания повторяющегося кода, как в первом примере?