我的回答
class Observer { constructor() { this.ob = {} } depend(key, cb) { if (!this.ob[key]) { this.ob[key] = [] } this.ob[key].push(cb) } notify(key) { this.ob[key] && this.ob[key].forEach(cb => cb()) }}
参考回答
class Subject { // 被观察者的类 被观察者 需要将观察者收集起来 constructor(name) { this.name = name; this.state = '非常开心' this.observers = []; } attach(o) { // 进行收集 this.observers.push(o); // on } setState(newState) { this.state = newState; this.observers.forEach(o => o.update(this.name, newState)) // emit }}class Observer { // 观察者 constructor(name) { this.name = name; } update(s, state) { console.log(this.name + ":" + s + '当前' + state); }}// vue 数据变了(状态) 视图要更新 (通知依赖的人) let s = new Subject('小宝宝');let o1 = new Observer('爸爸');let o2 = new Observer('妈妈');s.attach(o1)s.attach(o2)s.setState('不开心了')s.setState('开心了')