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");

你可能感兴趣的:(模式)