简易的观察者模式

所谓观察者模式,就是一对多的关系,一处调用多处实现,然后具备一些增删改的小功能。

源码


    class Event{
        constructor(){
            this.handlers = {}
        }

        on(type,handler){
            if(!this.handlers.hasOwnProperty(type)){
                this.handlers[type] = [];
            }
            this.handlers[type].push(handler)
        }

        trigger(type,args){

            if(Array.isArray(this.handlers[type])){
                let handlers = this.handlers[type]
                for(let i = 0 ,len = handlers.length;i<len;i++)
                {
                    handlers[i](args)
                }
            }
        }

        off(type,handler){
            if(Array.isArray(this.handlers[type])){
                let handlers = this.handlers[type]
                for(var i = 0 ,len = handlers.length;i<len;i++){
                    if(handlers[i] === handler)
                    {
                        break;
                    }
                }
                handlers.splice(i,1)
            }
        }
    }

测试


var event = new Event();
var fn = function(){
    console.log('fn')
}
event.on('aaa',()=>{console.log(123)})
event.on('aaa',()=>{console.log('bbb')})
event.on('aaa',(a)=>{console.log(a)})
event.on('aaa',fn)
event.on('b',(a)=>{console.log('bbbbbbbbb')})

event.trigger('aaa','bbbb')
event.trigger('b','bbbb')

console.log('---------------------------------------')
event.off('aaa',fn)
event.trigger('aaa','bbbb')

posted @ 2017-08-25 22:07  lake.hu  阅读(118)  评论(0编辑  收藏  举报