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