-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheventEmitter.js
61 lines (42 loc) · 1.27 KB
/
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Event Emitter
1. EventEmitter can emit (or trigger) events. When an event is emitted, any listeners (functions) that are subscribed to that event are called.
2. You can register listeners (callback functions) to be executed when a specific event is emitted.
3. An event can have multiple listeners.
4. EventEmitter also allows you to remove listeners from an event
*/
class EventEmitter {
constructor(){
this.emitter = {};
}
register(event, listeners){
if (this.emitter.hasOwnProperty(event)){
this.emitter[event].push(listeners);
}else {
this.emitter[event] = [listeners]
}
}
unregister(event, listener){
this.emitter[event] = this.emitter[event].filter((item) => item !== listener);
}
emit(event, ...args){
this.emitter[event].forEach((listener) => {
listener(...args);
})
}
}
const eventEmitter = new EventEmitter();
eventEmitter.register('joined', (...args)=>{
console.log("New Member Joined", args);
})
eventEmitter.register('joined', (...args)=>{
console.log("New Member 2 Joined", args);
})
eventEmitter.register('leaved', ()=>{
console.log("Member leaved");
})
eventEmitter.register('calling', ()=>{
console.log("Member calling");
})
eventEmitter.emit('joined', "Hey there")
eventEmitter.emit('calling')