设计模式之观察者模式_第1页
设计模式之观察者模式_第2页
设计模式之观察者模式_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JSpubsub 3 varpubsub=; (function (q) var topics = , subUid = -q.publish = function (topic, args) if(!topicstopic) return false;setTimeout(function () var subscribers = len = subscribers ? subscribers.length : while (len-) subscriberslen.func(topic,args);, return 正文(版本一介pubsub.subscribe(example1,func

2、tionpubsub.subscribe(example1,function(topics,data) console.log(topics + : + data);pubsub.publish(example1, hello world!); pubsub.publish(example1,test,a,b,c);pubsub.publish(example1,color:blue,text:hello q.subscribe = function (topic, func) if (!topicstopic) topicstopic=;vartoken=(+subUid).toString

3、(); token:token, func: funcreturn q.unsubscribe=function(token) for (var m in topics) if (topicsm) for(vari=0,j=topicsm.length;ij;i+) if (topicsmi.token = token) topicsm.splice(i,1); return token;return functionObserver() this.fns = ;functionObserver() this.fns = ;Ototype = subscribe:function(fn)uns

4、ubscribe: function (fn) this.fns=this.fns.filter(function (el) if(el!=fn) return el;update: function (o, thisObj) varscope=thisObj|window; function (el) vartestSubscription=pubsub.subscribe(example1,function(topics, data) console.log(topics + : + pubsub.publish(example1, hello world!); pubsub.publis

5、h(example1,test,a,b,c);pubsub.publish(example1,color:blue,text:hello setTimeout(function, pubsub.publish(example1,helloagain!(thiswillfail);版本filterforEachfilterforEachif (!Atotype.forEach) Atotype.forEach=function(fn,thisObj)var scope = thisObj | for(vari=0,j=this.length;ij;+i) fn.call(scope, thisi

6、, i, this);if (!Atotype.filter) Atotype.filter=function(fn,thisObj) var scope = thisObj | window;var a = for(vari=0,j=this.length;ij;+i) if (!fn.call(scope, thisi, i, this) el.call(scope, var o = new var f1 = function (data) console.log(Robbin: + datavar f2 = function (data) console.log(Randall: + d

7、atao.update(Tomf1 o.update(Tom2blogger user2blogger userobserver.make 2 var observer = addSubscriber: function (callback) this.subscribersthis.subscribers.length=callback;removeSubscriber: function (callback) for(vari=0;ithis.subscribers.length;i+) if (this.subscribersi = callback) delete publish: f

8、unction (what) for (var i = 0; i this.subscribers.length; i+) if (typeof this.subscribersi = function) omake: function (o) for (var i in this) oi = thisi; o.subscribers=;return 版本使用方法就比较简单了,订阅不同的回调函数,以便可以注册到不同的观察者对象里(可以同时注册到多个观察者对象里var tom = read: 使用方法就比较简单了,订阅不同的回调函数,以便可以注册到不同的观察者对象里(可以同时注册到多个观察者对象

9、里var tom = read: function (what) console.log(Tomvar mm = show: function (what) console.log(mm/ 订阅 blogger.recommend(123);/调用发布blogger.recommend(456); user.vote(789); /调用发布jQuery版var blogger = recommend: function (id) varmsgduduid; var user = vote: function (id) varmsg!ID=id; jQuery1.7on/off jQuery j

10、Query1.7on/off jQuery 3 function handle(e, a, b, c) e是事件对象,不需要关注 console.log(a + b + c);$.subscribe(/some/topic, $.publish(/some/topic, a, b, c); $.unsubscribe(/some/topic, handle); $.subscribe(/some/topic,function(e,a,b,c) console.log(a + b + c);$.publish(/some/topic, a, b, c); (function ($) var o = $.subscribe = function () o.on.apply(o,arguments);$.unsubscribe = function () o.off.apply(o, $.publish = function () o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论