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 REPL1 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); }) } } }
|