【发布时间】:2017-09-06 11:18:34
【问题描述】:
请帮助我没有得到我的代码中的错误。这是关于 js 中的观察者模式。收到错误“未捕获的类型错误:无法读取未定义的属性‘push’”。我认为这个错误是因为当我将它与 new 关键字一起使用时,没有在对象上创建“observers”键。
Js 小提琴: https://jsfiddle.net/2808w5x0/
function Subject(){
this.observers = [];
return {
subscribeObserver:function(observer){
observers.push(observer);
},
getObservers:function(){return this.observers;},
unSubscribeObserver:function(observer){
var index = this.observers.indexof(observer);
if(index > -1){
this.observers.splice(index,1);
}
},
notifyObserver:function(observer){
var index = this.observers.indexof(observer);
if(index > -1){
this.observer[index].notify(index);
}
},
notifyAllObserver:function(){
this.observers.foreach(function(val,idx){
val.notify(idx);
});
}
};
}
function Observer(){
return{
notify:function(idx){
console.log("Observer " + idx + " notified.");
}
}
}
var subject = new Subject();
console.log("subject ",subject.getObservers());
var ob1 = new Observer();
var ob2 = new Observer();
var ob3 = new Observer();
var ob4 = new Observer();
subject.subscribeObserver(ob1);
subject.subscribeObserver(ob2);
subject.subscribeObserver(ob3);
subject.subscribeObserver(ob4);
subject.notifyAllObserver();
【问题讨论】:
-
还请说明问题所在。您必须指定需要帮助的问题陈述。
-
我很抱歉。编辑了帖子。
-
应该
observers.push(observer);不是this.observers.push(observer);
标签: javascript observer-pattern