定义
发布-订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都将得到通知。我们一般用事件模型来代替传统的发布订阅模式。
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)
}
}
}
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){
return false
}
if(!fn){
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)
}
}
}
}
全局事件的命名冲突