发布:发动某个事件,执行一系列操作(把该事件对应的数组中的函数全部执行一遍)。
订阅:监听某个事件,该事件发生时,做一些事情(执行一个函数)。
代码示例:
const eventHub = {
map: {
// click: [f1 , f2]
},
on(name, fn){
if(this.map[name])
this.map[name].push(fn)
else
this.map[name] = [fn]
},
emit(name, data){
const q = this.map[name]
if(q)
q.forEach(f => f(data))
},
off(name, fn){
const q = this.map[name]
if(q) {
const index = q.indexOf(fn)
if(index >= 0)
q.splice(index, 1)
}
}
}
eventHub.on('click', console.log)
eventHub.on('click', console.error)
setTimeout(() => eventHub.emit('click', 'frank'), 3000)