2012-05-14 4 views

Antwort

14

Du hast Recht, in diesem Fall könnten sie einfach this verwendet haben.

Die Verwendung von me oder self ist ein bisschen wie ein Hack den richtigen Kontext this wird verwendet, um sicherzustellen, wie in JavaScript der Umfang der this Variante ist. Wenn zum Beispiel ein Ereignis eine Funktion innerhalb Ihrer Klasse auslösen würde, wäre this anders und wäre nicht Ihr Objekt, das die Funktion enthält, sondern stattdessen das Objekt, das die Funktion aufgerufen hat. Um dies zu beheben, verwenden Sie oft me oder self, um sicherzustellen, dass sie sich auf das korrekte Objekt beziehen ... this, wie im eigentlichen Objekt.

-1

self ist eine Kopie von 'this', aber es bezieht sich immer auf das richtige Objekt, und 'this' darf nicht.

+0

Es sei denn, Sie erstellen einen neuen Funktionsumfang. – ThiefMaster

+2

Dies ist eine hübsche * Hand winkende * Antwort ohne Beispiele und keine * echte * Erklärung. – Matt

2

Der einzige Grund, den Sie normalerweise tun würden, ist, wenn der Aufruf an doQueue() in einem Block ist, der den Wert this wie eine andere Funktion ändern wird.

In diesem Fall jedoch dient es keinem Zweck und war wahrscheinlich ein Rest von älterem Code, der nicht zurück geändert wurde.

2

Höchstwahrscheinlich wird der Entwickler wollte Konsistenz, aber nicht bei so tun.

Sonst würde man in einigen Funktionen verwenden this, self in anderen Funktionen und a mix of both in anderen Funktionen, je nachdem, wo Sie das Objekt verwenden und wenn Sie verschachtelte Funktionen/Rückrufe verwenden.

von always assigning this to self und diese dann verwenden, haben Sie eine zusätzliche Zuweisung am Anfang jeder Funktion, aber sie immer Verwendung self auf das Objekt zugreifen.

Was der Entwickler in dem von Ihnen geposteten Code gemacht hat, macht jedoch keinen Sinn. Er sollte entweder self oder this beide Male anstelle einer Mischung verwenden, die nicht einmal notwendig ist.

+0

... aber in der Zeile oben macht er 'this.buffer = false;'. – Matt

2

Nur um mehr Klarheit zu geben @ Richard früher gesagt,

Collection.prototype.onOpen = function() { 
    var self = this; 
    this.buffer = false; 
    this.onclick = function(){ 
    //do some other operations here 
    //if you refer `this` here then, `this` will refer to present function not the above. so to make sure it is referring to exact object people pass this to `me` or `self` 
    self.doQueue(); 
    } 
}; 
+1

Sie können eine Antwort auf seine Antwort vorschlagen, anstatt den Beitrag zu überladen, danke. –

Verwandte Themen