发布订阅模式极简版

2020-04-03  本文已影响0人  Chris__Liu

off与once方法只支持具名函数

  class EventEmitter {
            constructor() {
                this.hub = {}
            }
            $on(eventName, fn) {
                this.hub[eventName] ? this.hub[eventName].push(fn) : this.hub[eventName] = [fn]
            }
            $emit(eventName) {
                this.hub[eventName] && this.hub[eventName].forEach(fn => fn())
            }
            $off(eventName,fn) {
                if(this.hub[eventName]){
                    this.hub[eventName].forEach((item,i)=>{
                        if(item === fn){
                            this.hub[eventName].splice(i,1)
                        }
                    })
                }
            }
            $once(eventName,fn){
                if(this.hub[eventName]){
                    this.hub[eventName].forEach((item,i)=>{
                        if(item === fn){
                            fn()
                            this.$off(eventName,item)
                        }
                    })
                }
            }
        }
上一篇 下一篇

猜你喜欢

热点阅读