How to create an Event Emitter

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 = {};
}
// returns an unsubscribe function, which when called removes the
// callback's association with the event
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);
}
}
// emits all functions associated with a given event plus any arguments passed
emit(event, ...args) {
if (this._events[event]) {
const functions = this._events[event];
functions.forEach(fn => {
fn(...args);
})
}
}
}