-
-
Notifications
You must be signed in to change notification settings - Fork 627
/
EventEmitter.js
41 lines (35 loc) · 918 Bytes
/
EventEmitter.js
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
34
35
36
37
38
39
40
41
class EventEmitter {
constructor() {
this.observers = {};
}
on(events, listener) {
events.split(' ').forEach((event) => {
this.observers[event] = this.observers[event] || [];
this.observers[event].push(listener);
});
return this;
}
off(event, listener) {
if (!this.observers[event]) return;
if (!listener) {
delete this.observers[event];
return;
}
this.observers[event] = this.observers[event].filter((l) => l !== listener);
}
emit(event, ...args) {
if (this.observers[event]) {
const cloned = [].concat(this.observers[event]);
cloned.forEach((observer) => {
observer(...args);
});
}
if (this.observers['*']) {
const cloned = [].concat(this.observers['*']);
cloned.forEach((observer) => {
observer.apply(observer, [event, ...args]);
});
}
}
}
export default EventEmitter;