发布订阅原理
- 将要处理的时间放入事件队列中存储(订阅)
- 将事件队列中存储的事件,按照要求进行统一的执行(发布)
js代码实现
var dep= {};
dep.list= [];
dep.listen = function(key , fn){
if(!this.list[key]){
this.list[key]=[]
}
this.list[key].push(fn);
}
dep.trigger = function(){
var key = Array.prototype.shift.call(arguments)
var fns = this.list[key];
if(! fns || fns.length==0){
return
}
for(var i=0,fn;fn = fns[i++];){
fn.apply(this,arguments)
}
}
dep.listen('red',function(size){
console.log('小红颜色的尺寸'+size);
})
dep.listen('red',function(size){
console.log('小红颜色的尺寸'+size);
})
dep.listen('block',function(size){
console.log('小清颜色的尺寸'+size);
})
dep.trigger('red',37)
js代码实现原理
- 队列通过数组dep实现,
- 每个key对应一类js事件,每一个key都对应着单独的队列(数组实现)
- 通过key值的判断,取出对应的事件队列,循环执行队列中的事件