发布订阅

130 阅读1分钟

只储存一个回调函数

class EventsEmitter{
    constructor(){
        this.events=new Map()
    }
    on(name, callback){
        if(!this.events.has(name)){
            this.events.set(name,callback)
        }
    }
    off(name, callback){
        if(this.events.has(name)){
            const eventListeners = this.events.get(name)
            eventListeners.splice(0,1)
        }
    }
    emit(name, data){
        if(this.events.has(name)){
            this.events.get(name)(data)
        }
    }
  }
  let emitter = new EventsEmitter()
  export default emitter

储存多个回调函数

class EventsEmitter{
    constructor(){
        this.events=new Map()
    }
     on(name, callback){
        if(!this.events.has(name)){
            this.events.set(name,[])
        }
        this.events.get(name).push(callback)
    }
    off(name, callback){
        if(this.events.has(name)){
            const eventListeners = this.events.get(name)
            const index = eventListeners.indexof(callback)
            if(index != -1) {
                eventListeners.splice(index, 1)
            }
        }
    }
    emit(name, data){
        if(this.events.has(name)){
        const eventListeners = this.events.get(name)
        eventListeners.forEach((callback) => callback(data))
        }
    }
    let emitter = new EventsEmitter()
    export default emitter
emitter.emit('eventName', {'detail': "abc"})
Emitter.on('eventName', (res) => {
    console.log('res', res)
})
//res  {'detail': "abc"}