要被JavaScript的订阅发布模式玩坏了

上代码:
;(function(window,doc,undef){
vartopics={},
subUid=-1,
pubsubz={};
pubsubz.publish=function(topic,args){
if(!topics[topic]){
returnfalse;
}
setTimeout(function(){
varsubscribers=topics[topic],
len=subscribers?subscribers.length:0;
while(len--){
subscribers[len].func(topic,args);
}
},0);
returntrue;
};
pubsubz.subscribe=function(topic,func){
if(!topics[topic]){
topics[topic]=[];
}
vartoken=(++subUid).toString();
topics[topic].push({
token:token,
func:func
});
returntoken;
};
pubsubz.unsubscribe=function(token){
for(varmintopics){
if(topics[m]){
for(vari=0,j=topics[m].length;iif(topics[m][i].token===token){
topics[m].splice(i,1);
returntoken;
}
}
}
}
returnfalse;
};
getPubSubz=function(){
returnpubsubz;
};
window.pubsubz=getPubSubz();
}(this,this.document));
调用
vartestSubscriber=function(topics,data){
console.log(topics+":"+data);
};
vartestSubscription=pubsubz.subscribe('example1',testSubscriber);
pubsubz.publish('example1','helloworld!');
pubsubz.publish('example1',['test','a','b','c']);
pubsubz.publish('example1',[{'color':'blue'},{'text':'hello'}]);
看了一天没看懂为什么订阅和发布都是用pubsubz,求解:1.到底哪个是订阅者,哪个是发布者?2.为什么用同一个pubsubz??
慕妹3146593
浏览 310回答 2
2回答

莫回无

jQuery的自定义事件也是发布订阅模式,类比一下:varelem=$("#example");elem.on("hello",function(){});elem.trigger("hello");其中on相当于订阅,trigger相当于发布。想一下事件的绑定和事件的触发,其实发布订阅也是跟这个一致的,因此应该在同一个元素上。再回到你的第一个问题,pubsubz的代码相当于一个简单的实现发布订阅模式的JavaScript库(类似的还有AmplifyJS)。毕竟,发布订阅模式是需要用代码自行实现的。pubsubz为你提供发布订阅功能,你在任何需要发布订阅功能的时候,调用它提供的publish和subscribe方法就可以了。因为pubsubz只是一个很简单的发布订阅模式的实现,它相当于要求你所有的订阅(理解为绑定自定义事件)、发布(理解为触发自定义事件)都在它这个元素上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript