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 61 62 63 64 65 66
| class EventEmitter { constructor() { this.events = {}; } subscribe(eventName, callback) { if (!this.events[eventName]) { this.events[eventName] = []; }
this.events[eventName].push(callback);
const unsubscribe = () => { const index = this.events[eventName].indexOf(callback); if (index !== -1) { this.events[eventName].splice(index, 1); } };
return { unsubscribe }; } emit(eventName, args = []) { if (!this.events[eventName]) { return []; }
const results = []; for (const callback of this.events[eventName]) { results.push(callback(...args)); } return results; } }
const emitter = new EventEmitter();
const subscription1 = emitter.subscribe("myEvent", (arg1, arg2) => { console.log(`Callback 1: ${arg1}, ${arg2}`); });
const subscription2 = emitter.subscribe("myEvent", (arg1, arg2) => { console.log(`Callback 2: ${arg1}, ${arg2}`); });
const results = emitter.emit("myEvent", ["Hello", "World"]);
console.log(results);
subscription1.unsubscribe();
emitter.emit("myEvent", ["Goodbye", "EventEmitter"]);
|