《发布订阅》

42 阅读1分钟

on是监听事件 emit是触发事件 off是取消监听事件

const eventHub = { 
    map: {},  
    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(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',"123") },500 )