发布订阅者
// on是订阅 emit是发布 let e = { _callback: [], on(callback) { // 订阅一件事 当这件事发生的时候 触发对应的函数 // 订阅 就是将函数放到数组中 this._callback.push(callback); }, emit(value) { this._callback.forEach(method => { method(value); }); } }; // 订阅 e.on(function (value) { console.log(value + ":张三的订阅"); }); // 订阅 e.on(function (value) { console.log(value + ":李四的订阅"); }); // 订阅 e.on(function (value) { console.log(value + ":王五的订阅"); }); // 发布 e.emit('发布')
观察者
// 被观察者 (小宝宝) class Subject { constructor(name) { this.name = name; this.state = "开心"; // 被观察者的状态 this.observers = []; // 存放观察者 } // 需要将观察者放到自己的身上 attach(ther) { this.observers.push(ther); } // 更新被观察者的状态 setState(state) { this.state = state; this.observers.forEach(ther => { ther.update(this); }); } } // 观察者 class Observer { constructor(name) { this.name = name; } // 等会被观察者的状态发生变化会调用这个方法 update(subject) { console.log(this.name + ":" + subject.name + "当前状态是" + subject.state); } } let bady = new Subject("小宝宝"); let father = new Observer("爸爸"); let mother = new Observer("妈妈"); bady.attach(father); bady.attach(mother); bady.setState("不开心"); bady.setState("饿了");
标签:订阅,name,state,观察者,bady,发布,value From: https://www.cnblogs.com/z-bky/p/17033758.html