发布-订阅模式

79 阅读1分钟

当一个对象的状态发生改变时,所有依赖于他的对象都会收到通知。

作用

替代传统回调函数的方案。取代对象之间硬编码的通信机制

代码

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)