当前位置: 首页 > Web前端 > JavaScript

发布-订阅模型_0

时间:2023-03-27 11:48:27 JavaScript

发布-订阅(pubsub)发布-订阅模式也叫观察者模式,它定义了对象之间一对多的依赖关系。当一个对象的状态改变时,所有依赖它的对象都会被通知。注意:oneTo-many(one指发布,multi指订阅),就是先订阅再发布。功能:(1)支持简单的广播通信,当对象状态发生变化时,会自动通知订阅的对象(2)可以应用在异步编程中,代替回调函数,可以订阅ajax后的事件,并且只需要订阅你需要的部分(3)对象之间的松耦合(4)如何实现跨组件模型传值的发布-订阅?1、首先想一想发布者是谁?2.然后给发布者添加一个缓存列表,用来存放通知订阅者的回调函数。3.最后发布消息。发布者遍历缓存列表,依次触发存储在其中的订阅者回调函数。//定义一个publishervarshoeObj={}//有一个list用来存储functionshoeObj.list=[]//添加subscribersshoeObj.listen=function(key,fn){if(!this.list[key]){这个。list[key]=[]}this.list[key].push(fn)}//发布消息shoeObj.trigger=function(){//取出这个keyvarkey=Array.prototype.shift.call(arguments)varfns=this.list[key]//遍历这个数组,执行这个函数if(!fns||fns.length==0){return}for(vari=0,fn;fn=fns[i++]){fn.apply(this,arguments)}}//订阅shoeObj.listen('red',function(size){console.log('小红订阅的大小为${size}');})shoeObj.listen('black',function(size){console.log('小明的订阅大小为${size}');})//移除订阅if(!fns){returnfalse;}if(!fn){fns&&(fns.length=0);}else{for(vari=fns.length-1;i>=0;i--){var_fn=fns[i];if(_fn===fn){//删除这个数组fns.splice(i,1)}}}//发布shoeObj.trigger('red','37')shoeObj.tigger('black','42')