发布 — 订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状
态发生改变时,所有依赖于它的对象都将得到通知。在 JavaScript开发中,我们一般用事件模型
来替代传统的发布 — 订阅模式。
var salesOffices = {}; // 定义售楼处 salesOffices.clientList = []; // 缓存列表,存放订阅者的回调函数 salesOffices.listen = function(fn) { // 增加订阅者 this.clientList.push(fn); // 订阅的消息添加进缓存列表 }; salesOffices.trigger = function() { // 发布消息 for(var i = 0, fn; fn = this.clientList[i++];) { fn.apply(this, arguments); // (2) // arguments 是发布消息时带上的参数 } }; // 下面我们来进行一些简单的测试: salesOffices.listen(function(price, squareMeter) { // 小明订阅消息 console.log('价格= ' + price); console.log('squareMeter= ' + squareMeter); }); salesOffices.listen(function(price, squareMeter) { // 小红订阅消息 console.log('价格= ' + price); console.log('squareMeter= ' + squareMeter); }); salesOffices.trigger(2000000, 88); // 输出:200 万,88 平方米 salesOffices.trigger(3000000, 110); // 输出:300 万,110 平方米
至此,我们已经实现了一个最简单的发布 — 订阅模式.