2016-12-08 2 views
0

Ich versuche, ein JS-Objekt zu schreiben. An etwas hängenbleiben, ich verstehe nicht, wie Kontexte funktionieren. Hier ist ein einfaches Beispiel:Javascript Objekt Schließung Kontext

var MyApp = function(el) { 
    this.el = el; 
}; 

MyApp.prototype.bind = function() { 
    window.setTimeout(this.start, 300); 
} 

MyApp.prototype.test = function(msg) { 
    console.log(msg); 
} 

MyApp.prototype.start = function() { 
    console.log(this); // Returns the window context 
    this.test('Hello'); // Doesn't work, of course. 
} 

var myapp = new MyApp(el); 
myapp.bind(); 

Problem ist, wenn die Start-Methode aufrufen, ich im Fenster Kontext bin wegen der window.setTimeout. Gibt es eine Möglichkeit, dies zu beheben, oder handelt es sich um ein Musterdesignproblem?

Dank;)

+0

Eine der Lösungen zu dieser Frage behandelt die Verwendung von ['bind'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind), um das Problem zu beheben - verwechseln Sie es nicht mit Ihrer eigenen 'Bind'-Funktion, die Sie definiert haben. –

+0

Dies wurde bereits als ein Duplikat markiert, aber @GillesC stimmt von dem, was ich sagen kann. Sie können den richtigen Kontext mit 'window.setTimeout (this.start.bind (this), 300);'. –

+0

Nun, ich könnte etwas gefunden haben: – Axel

Antwort

1

Ich glaube nicht „binden“ eine Funktion auf Ihrem Prototyp Aufruf ist eine großartige Idee. Übergeben Sie jedoch

this.start.bind(this) 

Um SetTimeout würde dieses Problem lösen.

+0

So viel wie die Lösung funktioniert, der Text der Antwort macht keinen Sinn. –

+0

Warum denkst du nicht, dass es Sinn macht? – norbertk

+0

Ich kann keinen Sinn machen von 'Ich glaube nicht, rufen" binden "eine Funktion auf Ihrem Prototyp ist eine großartige Idee –

Verwandte Themen