// 发布订阅
class Event {
constructor() {
this.stack = [] // 存放订阅者
}
on(callback) {
this.stack.push(callback) // on事件中每一个订阅
}
emit() {
this.stack.forEach(item => item()) // emit中遍历数组,执行每一个
}
}
class Subject {
constructor() {
this.state = ' 不开心' // 被观察者的状态
this.stack = [] // 存放每个观察者
}
attack(o) {
this.stack.push(o) // 添加每个观察者到数组
}
setState(state) {
this.state = state // 改变被观察者的状态
this.stack.forEach(o => o.update(state)) // 通知每个观察者
}
}
class Observer {
constructor(name) {
this.name = name
}
update(value) {
console.log(`${this.name}更新啦 ${value}`) // 被观察者变化时,触发每个观察者的更新
}
}
let o1 = new Observer('o1')
let o2 = new Observer('o2')
let s1 = new Subject()
s1.attack(o1)
s1.attack(o2)
s1.setState('开心啊')