敲敲敲,不敲就会生疏,没事就敲一下吧。
class EventBus {
events: Record<string, Set<(...args:any[]) => void>> = {}
on(eventName: string, cb: (...args:any[]) =>void) {
(this.events[eventName] ??= new Set()).add(cb)
}
emit(eventName:string, ...args:any[]) {
this.events[eventName]?.forEach((cb) => cb(...args))
}
off(eventName:string, cb: (...args:any[]) => void){
this.events[eventName]?.delete(cb)
}
once(eventName:string, cb:()=>void) {
const handler = (...args:ang[]) => {
cb(...args)
this.off(eventName, handler)
}
this.on(eventName, handler)
}
}