msmusli
12/17/2017 - 1:09 PM

Javascript

Javascript

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时带上的参数
        }
    },
    remove: function(key, fn){
        var fns = this.clientList[key];
        if(!fns){
            return false;
        }
        if(!fn){
            fns && (fns.length =0);//如果没有传入具体的回调函数,表示需要取消key对应消息的所有订阅;
        }else{
            for (var l=fns.length-1; l>=0; l--){
                var _fn = fns[l];
                if(_fn === fn){
                    fns.splice(l,1);
                }
            }
        }
    }
};

var installEvent = function(obj){//给对象安装发布-订阅功能
    for (var i in event){
        obj[i] = event[i];
    }
}