class EventBus {
constructor() {
this.handlersMap = {}
}
on(eventName, ...handler) {
if (!this.handlersMap[eventName]) {
this.handlersMap[eventName] = []
}
this.handlersMap[eventName].push(...handler)
}
off(eventName, handler) {
if (!eventName) {
this.handlersMap = {}
return
}
if (!this.handlersMap[eventName]) {
return
}
this.handlersMap[eventName].forEach((currentHandler, index) => {
if (currentHandler === handler) {
this.handlersMap[eventName].splice(index, 1)
}
})
}
emit(eventName, ...args) {
if (!this.handlersMap[eventName]) {
return
}
console.log('eventName', args)
this.handlersMap[eventName].forEach(handler => {
handler.apply(this, args)
})
}
}
export default new EventBus()