Наследование от экземпляров в Typescript / JS - PullRequest
0 голосов
/ 19 июня 2019

Возможно ли наследовать от уже существующего экземпляра?

Конкретный вариант использования: у меня есть собственный класс 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.

Единственный вопрос, есть ли элегантный способ сделать это.

...