手写发布和订阅

159 阅读1分钟
  • 1发布和订阅是什么? 发布和订阅一种设计模式(套路)
const eventHub = {
    map:{},
    on:(name,fn)=>{
        eventHub.map[name] = eventHub.map[name] || []
        //defenece code
        eventHub.map[name].push(fn)
    }, 
    emit:(name,data)=>{
    eventHub.map[name].map(f=>f.call(null,data))
    },
    off:(name,fn)=>{
        if(!eventHub.map[name]){return}
        const index = eventHub.map[name].indexOf(fn)
        if(index<0){return}
        eventHub.map[name].splice(index,1)
    },
}

eventHub.on('click',console.log)
eventHub.on('click',console.error)
setTimeout(()=>{eventHub.emit('click','XXX')
},3000)

数据结构>算法,理解的数据结构越多,抽象能力越强

复习了一下map的用法

map[name].indexOf(xxx)

eventHub.map[name].splice(index.1)

eventHub.map[name].map(f=>f.call(null,data))