Here is one way to create an Event Emitter class which has the ability to subscribe to events and emit functions associated with those events.
EventEmitterTry in REPL| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
 | class EventEmitter {   constructor() {     this._events = {};   }         subscribe(event, fn) {     if (this._events[event] === undefined) {       this._events[event] = [];     }     this._events[event].push(fn);     return () => {       this._events[event] = this._events[event].filter(eventFn => eventFn !== fn);     }   }      emit(event, ...args) {     if (this._events[event]) {       const functions = this._events[event];       functions.forEach(fn => {         fn(...args);       })     }   } }
 |