观察者模式与发布订阅模式的区别:发布订阅模式有个事件调度中心
// 定义一个被观察者var observed = (function () {var observers = []; // 存放所有观察者的列表var id = 0; // 标记观察者var _val = null;return {// 被观察的变量get val() {return _val;},set val(value) {_val = valuethis.notify();return true;},// 添加观察者addObserver: function (observer) {if (observers.indexOf(observer) !== -1) return;observers.id = id++;observers.push(observer);},// 删除观察者removeObserver: function (observer) {observers = observers.filter(function (o) {return o.id !== observer.id});},// 通知所有的观察者notify() {observers.forEach(function (observer) {observer.update(_val);})}}})();// 定义一个观察者类function Observer(fn) {this.update = function (value) {fn(value);};}const observer1 = new Observer((a) => { console.log('o1', a) });const observer2 = new Observer((a) => { console.log('o2', a) });observed.addObserver(observer1);observed.addObserver(observer2);observed.val = 55; // 控制台打印出 o1 55 和 o2 55
