Pub/Sub模式

 1 var PubSub = {
 2     subscribe: function(ev, callback) {
 3         //创建 _callbacks 对象,除非它已经存在了
 4         var calls = this._callbacks || (this._callbacks = {});
 5         //针对给定的事件 ev 创建一个数组,除非这个数组已经存在
 6         //然后将回调函数追加到这个数组中
 7         (this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback);
 8         return this;
 9     },
10     publish: function() {
11         //将 arguments 对象转换为真正的数组
12         var args = Array.prototype.slice.call(arguments, 0);
13         //拿出第1个参数,即事件名称
14         var ev = args.shift();
15 
16         //如果不存在 _callbacks 对象,则返回
17         //或者如果不包含给定事件对应的数组
18         var list, calls, i, l;
19         if (!(calls = this._callbacks)) return this;
20         if (!(list = this._callbacks[ev])) return this;
21 
22         //触发回调
23         for (i = 0, l = list.length; i < l; i++) {
24             list[i].apply(this, args);
25         }
26         return this;
27     }
28 };
29 
30 //使用方法
31 PubSub.subscribe("wem", function() {
32     alert("Wem!");
33 });
34 
35 PubSub.publish("wem");
posted @ 2012-08-01 14:35  小猩猩君  阅读(810)  评论(0编辑  收藏  举报