发布/订阅模式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>发布&订阅模式</title> <script> var PubSub = { subscribe: function (ev, callback) { // 创建 _callbacks 对象,除非它已经存在了 var calls = this._callbacks || (this._callbacks = {}); // 针对给定的事件 key 创建一个数组,除非这个数组已经存在 // 然后将毁掉函数追加到这个数组中 (this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback); return this; }, publish: function () { // 将 arguments 对象转化为真正的数组 var args = Array.prototype.slice.call(arguments, 0); // 拿出第 1 个参数,即事件名称 var ev = args.shift(); // 如果不存在,_callbacks 对象,则返回 // 或者如果不包含给定事件对应的数组 var list, calls, i, l; if (!(calls = this._callbacks)) return this; if (!(list = this._callbacks[ev])) return this; // 触发回调 for (var i = 0, l = list.length; i < l; i++) { list[i].apply(this, args); } return this; } }; // 使用方法 PubSub.subscribe('wem', function () { alert('Wem'); }); PubSub.publish('wem'); </script> </head> <body> </body> </html>