舉個現(xiàn)實中的例子膀曾,小明到A開發(fā)商那買一套房子,碰巧現(xiàn)在沒房墙基,售樓處答應在有房子的時候通知小明软族。這時,小明就訂閱了售樓處的消息残制,售樓處負責發(fā)布消息立砸。這就是一個很好的發(fā)布=訂閱模式。售樓處和小明并不需要強耦合在一起〕醪瑁現(xiàn)在用代碼模式實現(xiàn)這一過程颗祝。
//訂閱發(fā)布功能
var event = {
clientList: [],
listen: function(key, fn) {
if(!this.clientList[key]) {
this.clientList[key] =[];
}
this.clientList[key].push(fn);
},
trigger: function() {
var key = Array.prototype.shift.call(arguments),
fns = this.clientList[key];
if(!fns || fns.length ===0) {
return false;
}
for(var i=0,fn; fn=fns[i++]; ) {
fn.apply(this, arguments);
}
}
};
//定義一個函數(shù)給所有對象安裝發(fā)布=訂閱功能
var installEvent = function(obj) {
for(var i in event) {
obj[i] = event[i];
}
};
//測試一下
var salesOffices = {};
installEvent(salesOffices);
salesOffices.listen('squareMeter88', function(price) {
console.log('價格=' + price);
});
salesOffices.listen('squareMeter100', function(price) {
console.log('價格=' + price);
});
salesOffices.trigger('squareMeter88',2000000);
salesOffices.trigger('squareMeter100',300000);