上代码:;(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;i
2 回答

莫回无
TA贡献1865条经验 获得超7个赞
jQuery的自定义事件也是发布订阅模式,类比一下:varelem=$("#example");elem.on("hello",function(){});elem.trigger("hello");其中on相当于订阅,trigger相当于发布。想一下事件的绑定和事件的触发,其实发布订阅也是跟这个一致的,因此应该在同一个元素上。再回到你的第一个问题,pubsubz的代码相当于一个简单的实现发布订阅模式的JavaScript库(类似的还有AmplifyJS)。毕竟,发布订阅模式是需要用代码自行实现的。pubsubz为你提供发布订阅功能,你在任何需要发布订阅功能的时候,调用它提供的publish和subscribe方法就可以了。因为pubsubz只是一个很简单的发布订阅模式的实现,它相当于要求你所有的订阅(理解为绑定自定义事件)、发布(理解为触发自定义事件)都在它这个元素上。
添加回答
举报
0/150
提交
取消