JS实现event bus

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')