3 回答

TA貢獻1735條經驗 獲得超5個贊
在最簡單的形式中,觀察者不過是由主題調用的功能。更多“復雜”的觀察者將是帶有“通知”或類似功能,錯誤處理程序以及也許是“完成”通知的對象,具體取決于主題。
因此,這是一個非?;镜氖纠齺碚f明這一點:
var Subject = function() {
let observers = [];
return {
subscribe: function(observer) {
observers.push(observer);
},
unsubscribe: function(observer) {
var index = observers.indexOf(observer);
if(index > -1) {
observers.splice(index, 1);
}
},
nextValue: function(value) {
// call every registered observer
for(var i = 0; i < observers.length; i++){
observers[i](value);
}
}
};
};
// now simply pass an observer function to the subject
const subject = new Subject();
subject.subscribe(value => {
// do whatever you want with the value, call functions etc.
console.log(value);
});
subject.nextValue('hello world!');

TA貢獻1795條經驗 獲得超7個贊
下面的代碼是一個常見的Observer Pattern程序。我看到它在通知觀察者時執行console.log(console.log(“ Observer” + number +“已通知!”);)。我是否可以在這里返回其他內容:值,函數調用等?
是,當主題調用通知時,它可以傳遞數據(而不是索引)或將自身傳遞給觀察者。通過這種方式,觀察者可以檢查主體的狀態并對其進行處理。方法notifyObserver變為:
notifyObserver: function(observer) {
var index = observers.indexOf(observer);
if(index > -1) {
observers[index].notify(this);
}
},
觀察者就像:
var Observer = function(number) {
return {
notify: function(subject) {
// do something with subject
...
}
}
}
添加回答
舉報