2009-06-26 5 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); 
}; 

est-ce possible? Merci, ~ ck à San DiegoPuis-je changer le contexte de javascript "this"?

+0

Voir la réponse à cette question: http://stackoverflow.com/questions/456967/javascript-how-to-set-this-variable-easily – molf

+2

yepp, plus ou moins un doublon de http: // stackoverflow. com/questions/456967/javascript-comment-définir-cette-variable-facilement La réponse acceptée était d'utiliser call()/apply(), voir https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply – VolkerK

+0

Ceci est juste trop confus. Toutes les réponses disent non, vous ne pouvez pas le faire. Apparemment, les réponses à la question en double façon oui, vous pouvez le faire. Allez comprendre. – DOK

Répondre

39

Non, ce n'est pas possible.

Vous pouvez appeler une méthode avec une valeur spécifiée pour cette (en utilisant method.apply()/method.call()) mais vous ne pouvez pas réattribuer le mot-clé, this.

+0

plus d'informations à [joshuakehn.com] (http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html) – vdubus

+0

Vous pouvez également passer 'this' comme argument à la fonction dans l'appel à 'UI $ Contract $ ddlForm_change', alors vous pouvez utiliser cet argument comme contexte/accéder à ses propriétés –

7

J-P est correct. Ce n'est pas possible. Reportez-vous au document de spécification du langage JavaScript ECMA-262. Vous pouvez télécharger la norme d'ici:

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

Le fichier est ECMA-262.pdf et à la page 39, section 10.1.7.

10.1.7 Cette

Il y a une valeur associée à cette chaque contexte d'exécution active. Le cette valeur dépend de l'appelant et le type de code en cours d'exécution et est déterminé lorsque le contrôle entre le contexte d'exécution . La valeur associée à un contexte d'exécution est immuable.

Remarque "est immuable". c'est-à-dire ne peut pas être changé.

9

Vous ne pouvez pas modifier ce que this fait référence à à l'intérieur la fonction.

Cependant, vous pouvez appel une fonction dans un contexte spécifique - de sorte que this fait référence à un objet spécifique - en utilisant call ou apply.