发布--订阅

定义
发布-订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都将得到通知。我们一般用事件模型来代替传统的发布订阅模式。
    var event  = {
        clientList:[],
        listen:function (key,fn) {
            if(!this.clientList[key]){
                this.clientList[key] = []
            }
            this.clientList[key].push(fn)//订阅消息添加进缓存列表
        },
        trigger:function () {
            var key = Array.prototype.shift.call(arguments)
            fns = this.clientList[key]
            if(!fns || fns.length ===0){
                return false;
            }
            for(var i =0,fn;fn=fns[i++];){
                fn.apply(this,arguments)//arguments时trigger时带的参数
            }
        }
    }
    var installEvent = function (obj) {
        for(var i in event){
            obj[i] = event[i]
        }
    }
    var salesOffices = {}
    installEvent(salesOffices)
    salesOffices.listen('squareMeter88',function (price) {
        console.log('价格'+price)
    })
    salesOffices.listen('squareMeter100',function (price) {
        console.log('价格'+price)
    })
    salesOffices.trigger('squareMeter88',200000)
    salesOffices.trigger('squareMeter100',300000)
//取消订阅
    event.remove = function (key,fn) {
            var fns =this.clientList[key]
            if(!fns){   //如果key对应的消息没有被订阅,则直接返回
                return false
            }
            if(!fn){    //如果没有传入具体的回调函数,则取消所有的key对应消息的所有订阅
                fns && (fns.length = 0)
            }else {
                for(var l= fns.length-1;l>=0;l++){
                    var _fn = fns[l];
                    if(_fn === fn){
                        fns.splice(l,1) //删除订阅的回调函数
                    }
                }
            }
        }
全局事件的命名冲突
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值