class EventBus {
constructor() {
this.eventMap = new Map()
}
on(event, callback) {
if(this.eventMap.has(event)) {
let cbs = this.eventMap.get(event)
cbs.push(callback)
this.eventMap.set(event, cbs)
} else {
this.eventMap.set(event, [callback])
}
}
emit(...args) {
let event = args[0]
let cbs = this.eventMap.get(event)
if(!cbs) {
return
}
let payloads = args.slice(1)
cbs.forEach(cb => {
cb && cb.apply(this, payloads)
})
}
}
let eventBus = new EventBus()
eventBus.on('change', () => {
console.log('change 1')
})
eventBus.on('change', () => {
console.log('change 2')
})
eventBus.emit('change', 'payload')