2016-08-01 8 views
2

Ich habe gerade diesen Observer Pattern Code aus https://scotch.io/bar-talk/4-javascript-design-patterns-you-should-know#observer-design-pattern ausprobiert, aber es funktioniert nicht. Es sagt mir, dass this.observers ist undefined, aber ich verstehe wirklich nicht warum?Was ist falsch in diesem Observer Pattern Code?

Hier ist der Beispielcode:

var Subject = function() { 
this.observers = []; 

return { 
    subscribeObserver: function(observer) { 
    this.observers.push(observer); 
    }, 
    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.observers[index].notify(index); 
    } 
    }, 
    notifyAllObservers: function() { 
    for(var i = 0; i < this.observers.length; i++){ 
     this.observers[i].notify(i); 
    }; 
    } 
}; 
}; 

var Observer = function() { 
    return { 
    notify: function(index) { 
     console.log("Observer " + index + " is notified!"); 
    } 
    } 
} 

var subject = new Subject(); 

var observer1 = new Observer(); 
var observer2 = new Observer(); 
var observer3 = new Observer(); 
var observer4 = new Observer(); 

subject.subscribeObserver(observer1); 
subject.subscribeObserver(observer2); 
subject.subscribeObserver(observer3); 
subject.subscribeObserver(observer4); 

subject.notifyObserver(observer2); // Observer 2 is notified! 

subject.notifyAllObservers(); 
// Observer 1 is notified! 
// Observer 2 is notified! 
// Observer 3 is notified! 
// Observer 4 is notified! 
+0

Ihr Code hat keine Zuhörer! Woher hast du diesen Fehler? – ProllyGeek

+0

sry sollte dies sein.observer – fawee

+0

überprüfen Sie meine Antwort, ich denke, es ist offensichtlich, jetzt, warum es diesen Fehler warf. – ProllyGeek

Antwort

0

Bitte überprüfen Sie diese fiddle:

var Subject = function() { 

    this.observers = []; 

    this.subscribeObserver = function(observer) { 

    this.observers.push(observer); 

}, 

    this.unsubscribeObserver = function(observer) { 

    var index = this.observers.indexOf(observer); 

     if(index > -1) { 

     this.observers.splice(index, 1); 

     } 

}, 

    this.notifyObserver = function(observer) { 

    var index = this.observers.indexOf(observer); 

    if(index > -1) { 

     this.observers[index].notify(index); 

    } 

}, 

    this.notifyAllObservers = function() { 

     for(var i = 0; i < this.observers.length; i++){ 

     this.observers[i].notify(i); 

    }; 

    } 

}; 

var Observer = function() { 

return { 

    notify: function(index) { 

     console.log("Observer " + index + " is notified!"); 

    } 

    } 

} 

var subject = new Subject(); 

var observer1 = new Observer(); 
var observer2 = new Observer(); 
var observer3 = new Observer(); 
var observer4 = new Observer(); 

subject.subscribeObserver(observer1); 
subject.subscribeObserver(observer2); 
subject.subscribeObserver(observer3); 
subject.subscribeObserver(observer4); 

subject.notifyObserver(observer2); // Observer 2 is notified! 

subject.notifyAllObservers(); 
// Observer 1 is notified! 
// Observer 2 is notified! 
// Observer 3 is notified! 
// Observer 4 is notified! 

In Ihrer Rückkehr Objekt die Beobachter nicht definiert ist, das ist, warum Sie die native Methode zugreifen kann nicht „Push ".