var shoeObj = {}; // 定義發佈者 shoeObj.list = []; // 緩存列表 存放訂閱者回調函數 // 增長訂閱者 shoeObj.listen = function(key,fn) { if(!this.list[key]) { // 若是尚未訂閱過此類消息,給該類消息建立一個緩存列表 this.list[key] = []; } this.list[key].push(fn); // 訂閱消息添加到緩存列表 } // 發佈消息 shoeObj.trigger = function(){ var key = Array.prototype.shift.call(arguments); // 取出消息類型名稱 var fns = this.list[key]; // 取出該消息對應的回調函數的集合 // 若是沒有訂閱過該消息的話,則返回 if(!fns || fns.length === 0) { return; } for(var i = 0,fn; fn = fns[i++]; ) { fn.apply(this,arguments); // arguments 是發佈消息時附送的參數 } }; // 小紅訂閱以下消息 shoeObj.listen('red',function(size){ console.log("尺碼是:"+size); }); // 小花訂閱以下消息 shoeObj.listen('block',function(size){ console.log("再次打印尺碼是:"+size); }); shoeObj.trigger("red",40); shoeObj.trigger("block",42);