forked from gongmw/js-example
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheventEmitter.js
32 lines (27 loc) · 859 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
class EventEmitter {
constructor() {
this.handlers = {};
}
on(evtName, handler) {
if (!(evtName in this.handlers)) {
this.handlers[evtName] = [];
}
this.handlers[evtName].push(handler);
}
emit(evtName, data) {
if (Array.isArray(this.handlers[evtName])) {
this.handlers[evtName].forEach(handler => handler.apply(this, [data]));
} else {
console.warn(`trying to emit an event ${evtName}, but no handler found!`);
}
}
off(evtName, handler) {
if (Array.isArray(this.handlers[evtName])) {
this.handlers[evtName] = this.handlers[evtName].filter(h => {
h !== handler;
});
} else {
console.warn(`trying to off an event ${evtName}, but no handler found!`);
}
}
}