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

è possibile? Grazie, ~ ck a San DiegoPosso cambiare il contesto di javascript "questo"?

+0

Vedere la risposta a questa domanda: http://stackoverflow.com/questions/456967/javascript-how-to-set-this-variable-easily – molf

+2

yepp, più o meno un duplicato di http: // stackoverflow. it/questions/456967/javascript-how-to-set-this-variable-simple La risposta accettata era usare call()/apply(), vedere https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply – VolkerK

+0

Questo è solo troppo confuso. Tutte le risposte dicono di no, non puoi farlo. Apparentemente, le risposte alla domanda duplicata sono sì, puoi farlo. Vai a capire. – DOK

risposta

39

No, non è possibile.

è possibile chiamare un metodo con un valore specificato per questo (usando method.apply()/method.call()) ma non è possibile riassegnare la parola chiave, this.

+0

maggiori informazioni su [joshuakehn.com] (http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html) – vdubus

+0

Puoi anche passare 'this' come argomento alla funzione nella chiamata a 'UI $ Contract $ ddlForm_change', quindi puoi usare quell'argomento come contesto/accedere alle sue proprietà –

7

J-P è corretto. Non è possibile. Fare riferimento al documento delle specifiche della lingua JavaScript ECMA-262. È possibile scaricare lo standard da qui:

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

il file è ECMA-262.pdf ea pagina 39, sezione 10.1.7.

10.1.7 Questo

C'è un tale valore associato ogni contesto di esecuzione attivo. Il valore dipende dal chiamante e il tipo di codice in esecuzione ed è determinato quando il controllo entra nel contesto di esecuzione . Il valore associato a un contesto di esecuzione non è modificabile.

Nota "è immutabile". non può essere cambiato.

9

Non è possibile modificare ciò che fa riferimento a all'interno della funzione.

Tuttavia, è possibile chiamata una funzione in un contesto specifico - in modo che this si riferisce ad un oggetto specifico - utilizzando call o apply.

Problemi correlati