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