接着学习《JavaScript设计模式与开发实践》一书。
书中用售楼处发给订阅者楼房信息短信的例子,说明了发布-订阅模式。一个发布-订阅模式,总结来说,由以下几条:
1.首先要指定好谁充当发布者,比如售楼处;
2.然后给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者;
3.最后发布消息的时候,发布者会遍历这个缓存列表,依次触发里面存放的订阅者回调函数。
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); } };
对多态的再次理解。
多态:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
要实现对象的多态性,就要把不变的部分分隔出来,然后把可变的部分各自封装起来。以鸡鸭发声的那个例子讲,首先我们把不变的部分隔离出来,那就是所用的动物都会发出叫声:
var makeSound = function (animal) { animal.sound(); };
然后把可变的部分各自封装起来,我们刚才提到的多态性实际指的是对象的多态性:
var Duck = function () {}; Duck.prototype.sound = function () { console.log('嘎嘎嘎'); }; var Chicken = function () {}; Chicken.prototype.sound = function () { console.log('咯咯咯'); }; makeSound(new Duck()); makeSound(new Chicken());