Возможно ли наследовать от уже существующего экземпляра?
Конкретный вариант использования: у меня есть собственный класс EventEmitter, который может генерировать субэмиттеры. Субмиттеры также являются EventEmitters, которые просто излучают по цепочке.
// _EventEmitter is a standard EventEmitter
class EventEmitter extends _EventEmitter {
public parent?: EventEmitter;
public emit(event: string | symbol, ...args: any[]): boolean {
const result = super.emit(event, ...args);
if (this.parent) {
this.parent.emit(event, ...args);
}
return result;
}
public subemitter() {
const emitter = new EventEmitter();
emitter.parent = this;
return emitter;
}
}
Я хочу объявить, что ВСЕ экземпляры X наследуются от определенного статического EventEmitter.
В этом случае все параграфы отправляют свои события централизованному агрегирующему источнику.
class Paragraph extends EventEmitter {
public static emitter = new EventEmitter();
constructor() {
super();
// Obviously this will work, but this is breaking abstraction
this.parent = Paragraph.emitter;
// Alternatively, i could allow the following:
// super(Paragraph.emitter)
// by allowing super(parent?: EventEmitter)
// Would like to apply constructor to Paragraph.emitter.subemitter().
// ... Initialize other methods ...
}
}
Логически, объект может быть создан с цепочкой прототипов следующим образом:
this -> Paragraph -> EventEmitter.
Единственный вопрос, есть ли элегантный способ сделать это.