3 回答
TA贡献1735条经验 获得超5个赞
在最简单的形式中,观察者不过是由主题调用的功能。更多“复杂”的观察者将是带有“通知”或类似功能,错误处理程序以及也许是“完成”通知的对象,具体取决于主题。
因此,这是一个非常基本的示例来说明这一点:
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
...
}
}
}
添加回答
举报