发布订阅模式
on: 负责订阅事件, emit负责发布事件, eventMap: 事件名称和事件的映射
class EventEmitter {
constructor() {
this.eventMap = {}
}
on(type, handler) {
if (!(handler instanceof Function)) {
throw new Error('Must be a Function!')
}
if (!this.eventMap[type]) {
this.eventMap[type] = []
}
this.eventMap[type].push(handler)
}
emit(type, params) {
if (this.eventMap[type]) {
this.eventMap[type].forEach((handler, index) => {
handler(params)
})
}
}
off(type, handler) {
if (this.eventMap[type]) {
this.eventMap[type].splice(this.eventMap[type].indexOf(handler) >>> 0, 1)
}
}
}
const myEvent = new EventEmitter()
const testHandler = function (params) {
console.log(`test事件被触发了,testHandler 接收到的入参是${params}`)
}
myEvent.on('test', testHandler)
myEvent.on('testb', testHandler)
myEvent.emit('test', 'newSate aaa')
myEvent.emit('testb', 'newSate bbb')
console.info(myEvent)
