发布订阅者模式,观察者模式(未完)

79 阅读1分钟

一.发布订阅者模式:

class EventEmitter {
            constructor(){
                this.arr={}//数组对象
            }
            //订阅对象的方法
            on(name,callback){
                if(this.arr.name){
                    this.arr.name.push(callback)
                }else{
                    this.arr.name=[callback]
                }
            }
            //触发事件的方法
            emit(name,...args){
                if(this.arr.name){
                    this.arr.name.forEach(element => {
                        element.apply(this,args)
                    })
                }
            }
            //删除事件的方法
            remove(name,callback){
                if(this.arr.name){
                    this.arr.name.filter(element => {
                        return element!=callback
                    })
                }
            }
            //只调用一次就删除的方法
            once(name,callback){
                //将callback封装在fn中,先放入arr中,执行后fn被删除
                const fn=()=>{
                    callback()
                    this.remove(name,fn)
                }
                this.on(name,fn)
            }
        }

二:观察者模式: