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

¿Esto es posible? Gracias, ~ ck en San Diego¿Puedo cambiar el contexto de javascript "this"?

+0

Ver la respuesta a esta pregunta: http://stackoverflow.com/questions/456967/javascript-how-to-set-this-variable- fácil – molf

+2

yepp, más o menos un duplicado de http: // stackoverflow. com/questions/456967/javascript-how-to-set-this-variable-easily La respuesta aceptada fue usar call()/apply(), ver https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply – VolkerK

+0

Esto es TAN confuso. Todas las respuestas dicen que no, no puedes hacerlo. Aparentemente, las respuestas a la pregunta duplicada sí, puedes hacerlo. Imagínate. – DOK

Respuesta

39

No, no es posible.

puede llamar a un método con un valor especificado para este (usando method.apply()/method.call()) pero no se puede volver a asignar la palabra clave, this.

+0

más información en [joshuakehn.com] (http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html) – vdubus

+0

También puede pasar 'this' como argumento a la función en la llamada a 'UI $ Contract $ ddlForm_change', entonces puedes usar ese argumento como contexto/acceder a sus propiedades –

7

J-P es correcto. Esto no es posible. Consulte el documento de especificación del lenguaje JavaScript ECMA-262. Puede descargar el estándar de aquí:

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

El archivo es ECMA-262.pdf y en la página 39, sección 10.1.7.

10.1.7 Esta

Hay un valor asociado a este cada contexto de ejecución activo. El este valor depende de la persona que llama y el tipo de código que se está ejecutando y es determinado cuando el control ingresa al contexto de ejecución . El valor asociado a un contexto de ejecución es inmutable.

Nota "is inmutable". es decir, no puede ser cambiado.

9

No puede cambiar a qué se refiere this desde dentro de la función.

Sin embargo, puede llamada a una función en un contexto específico - de manera que this se refiere a un objeto específico - mediante el uso de call o apply.

Cuestiones relacionadas