使用发布订阅的设计模式
js
class EventBus {
on(eventName, listener) {
if (!this.listeners[eventName]) {
this.listeners[eventName] = new Set()
}
this.listeners[eventName].add(listener)
}
emit(eventName, ...args) {
this.listeners[eventName].forEach(listener => listener(...args))
}
off(eventName, listener) {
if (!this.listeners[eventName]) {
throw new Error(`Event with name ${eventName} is not found`)
}
this.listeners[eventName].delete(listener)
}
}
export default new EventBus()