// 观察者模式 var observer = { addSubscriber: function (callback) { this.subscribers[this.subscribers.length] = callback; }, removeSubscriber: function (callback) { var len = this.subscribers.length, i; for (i = 0; i < len - 1; i++) { if (this.subscribers[i] === callback) { this.subscribers.splice(i, 1); } } }, publish: function (what) { var len = this.subscribers.length, i; for (i = 0; i < len; i++) { if (typeof this.subscribers[i] === "function") { this.subscribers[i](what); } } }, make: function (o) { var i; for (i in this) { o[i] = this[i]; } o.subscribers = []; console.warn('发布者注册完毕') } }; // 注册发布者 var tonightPaper = { newIssue: function () { var paper = "Have a wonderful love !"; this.publish(paper); } }; observer.make(tonightPaper); // 注册订阅者 var glue = { read: function (what) { console.warn("It says" + what); } }; tonightPaper.addSubscriber(glue.read); tonightPaper.newIssue();