前端观察者模式 observer

var Observer = function(){
    this.callbacks=[];
};
Observer.prototype.subscribe = function(mes,callback,observer) {
    this.callbacks[mes] = this.callbacks[mes]||[]
    this.callbacks[mes].push({
        callback:callback,
        scope:observer||this
    });
}
Observer.prototype.publish = function(mes,datas){
    this.callbacks[mes] = this.callbacks[mes]||[];
    for(var i=0,len = this.callbacks[mes].length;ithis.callbacks[mes][i].callback.apply(this.callbacks[mes][i].scope,datas||[]);
    }
}
Observer.prototype.unsubscribe = function(mes,observer){
    if(!this.callbacks[mes])return;
    this.callbacks[mes] = this.callbacks[mes].filter(function(item,index,arr){
        return item != observer;
    })
}

var observer = new Observer();
var subscriber = {
    subscribeMsg: function(){alert("subscribeMsg ")}
};
observer.subscribe("msg", function(){this.subscribeMsg()},subscriber);
observer.publish("msg");

你可能感兴趣的:(前端基础)