// 观察者模式--observer
//当一个变量修改时,可以自动通知所有关注这个变量的其他对象,让他们自动重新获取这个变量的新值
var data = {
//例如以下money变量,就是所有观察者关注的变量
money: 100,
//只要data中money发生改变,调用通知函数notifyAll
setmoney(x) {
this.money = x;
this.notifyAll()
},
// 观察者们用数组接住
observers: [],
//通知函数遍历observers完,每个对象都调用get函数重新获取关注的money从而实现
notifyAll() {
this.observers.forEach((p) => {
p.getmoney()
})
}
}
var obj1 = {
// 默认值0
money: 0,
getmoney() {
console.log(`观察者obj1-->data中变量已经改为了:${data.money}`);
this.money = data.money;
}
}
var obj2 = {
money: 0,
getmoney() {
console.log(`观察者obj2-->data中变量已经改为了:${data.money}`);
this.money = data.money;
}
}
var obj3 = {
money: 0,
getmoney() {
console.log(`观察者obj3-->data中变量已经改为了:${data.money}`);
this.money = data.money;
}
}
// 把每个观察者对象添加到data对象的observers数组中
data.observers.push(obj1);
data.observers.push(obj2);
data.observers.push(obj3);
data.setmoney(200);
console.log(obj1.money);
console.log(obj2.money);
console.log(obj3.money);
data.setmoney(300);
//个人理解:
/*var data={
变量:100,
set(...;this.通知所有观察者),
观察者:[],
通知函数(){
观察者.forEach(p=>{p.get()})
}
}
var 观察者1={
变量:0,
get(){
观察者1.变量=data.变量//接收到通知,重新获取该变量的值
}
}
观察者2\观察者3同理
*/
07-07
2544
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-27
726
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-12
306
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交