2009-06-26 6 views
24
var UI$Contract$ddlForm_change = function() { 

    //'this' is currently the drop down that fires the event 
    // My question is can I change the context so "this" represents another object? 
    this = SomeObject; 

    // then call methods on the new "this" 
    this.someMethod(someParam); 
}; 

ist das möglich? Danke, ~ ck in San DiegoKann ich den Kontext von Javascript "this" ändern?

+0

Siehe die Antwort auf diese Frage: http://stackoverflow.com/questions/456967/javascript-how-to-set-this-variable-easily – molf

+2

yepp, mehr oder weniger ein Duplikat von http: // stackoverflow. com/questions/456967/javascript-how-to-set-this-variable-leicht Die akzeptierte Antwort war Aufruf()/apply(), siehe https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply – VolkerK

+0

Das ist einfach zu verwirrend. Alle Antworten sagen nein, du kannst es nicht tun. Offenbar, die Antworten auf die doppelte Frage, ja, Sie können es tun. Stelle dir das vor. – DOK

Antwort

39

Nein, es ist nicht möglich.

Sie können für diese (mit method.apply()/method.call()) ein Verfahren mit einem bestimmten Wert nennen, aber Sie können das Schlüsselwort nicht neu zuweisen, this.

+0

Weitere Informationen unter [joshuakehn.com] (http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html) – vdubus

+0

Sie können auch 'this' als Argument an die Funktion im Aufruf an übergeben 'UI $ Contract $ ddlForm_change', dann können Sie dieses Argument als Kontext/Zugriff auf seine Eigenschaften verwenden –

7

J-P ist korrekt. Das ist nicht möglich. Beziehen Sie sich auf das JavaScript-Spezifikationsdokument ECMA-262. Sie können den Standard von hier herunterladen:

http://www.ecma-international.org/publications/standards/Ecma-262.htm

Die Datei ist ECMA-262.pdf und auf Seite 39, Abschnitt 10.1.7.

10.1.7 Diese

eine dieser Wert mit Kontext jeder aktive Ausführung assoziiert Es ist. Der Wert dieser Wert ist abhängig vom Aufrufer und der Typ des ausgeführten Codes und wird bestimmt, wenn die Steuerung in den Ausführungskontext eintritt. Der mit einem Ausführungskontext verknüpfte Wert ist unveränderlich.

Hinweis "ist unveränderlich". d.h. kann nicht geändert werden.

9

Sie können nicht ändern, was this von innerhalb die Funktion bezieht.

Sie können jedoch Aufruf eine Funktion in einem bestimmten Kontext - so dass this bezieht sich auf ein bestimmtes Objekt - durch call oder apply verwenden.