当一个对象的状态发生改变时,所有依赖于他的对象都会收到通知。
作用
替代传统回调函数的方案。取代对象之间硬编码的通信机制
代码
const eventHub = {
map:{
//click:[f1,f2]
},
on:(name,fn) =>{
eventHub.map[name] = eventHub.map[name] || []
eventHub.map[name].push(fn)
},
emit:(name,data) =>{
const q = eventHub.map[name]
if(!q) return
q.map(f => f.call(null,data))
return undefined
},
off:(name, fn) =>{
const q = eventHub.map[name]
if(!q){return}
const index = q.indexOf(fn)
if(index<0){return}
q.splice(index,1)
}
}
eventHub.on('click',console.log)
eventHub.on('click',console.error)
setTimeout(()=>{
eventHub.emit('click','hi')
},3000)