手撕一个eventBus
本文最后更新于:2021/08/29 , 星期日 , 22:53
首先需要知道 eventBus 中的方法都有哪些。按照方法进行基础框架的搭建
| class eventBus { constructor() {}
emit(eventName, ...args) {}
on(eventName, cb) {}
onOnce(eventName, cb) {}
off(eventName) {} }
|
new 的时候对 event 进行初始化。然后分别填入逻辑
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
| class eventBus { constructor() { this.events = {}; }
emit(eventName, ...args) { const cb = this.events[eventName]; if (!cb) { throw new Error("没这个事件啊"); }
cb.forEach((cb) => cb.apply(this, args)); return this; }
on(eventName, cb) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(cb); return this; }
onOnce(eventName, cb) { const func = (...args) => { this.off(eventName, func); cb.apply(this, args); }; this.on(eventName, func); }
off(eventName, cb) { if (!cb) { this.events[eventName] = null; } else { this.events[event] = this.events[event].filter((item) => item !== cb); } return this; } }
|