alcance variable en los manejadores de eventos: el "este" endrum
en JavaScript, los métodos de instancia utilizados como controladores de llamadas de eventos pueden conducir a problemas de alcance. Cuando se activa el controlador de eventos, el alcance de "esto" cambia de la instancia prevista al elemento que invocó la devolución de llamada. Esto requiere el uso de una variable para "capturar" y mantener el alcance de la instancia.
La técnica de declarar una variable "propia" para alias "esto" y pasarlo al controlador de eventos, como se ve en el fragmento de código, es una solución común. Sin embargo, su apariencia no convencional puede generar inquietudes sobre su idoneidad.
alias "auto":
El problema central no es específico de jQuery, sino que se refiere al comportamiento de cierre de JavaScript. Si bien los cierres permiten que las funciones integradas accedan a las variables desde su alcance principal, este pseudo-variable se comporta de manera diferente. Como lo demuestra el código:
// Attempt to use "this" in embedded functions function xyz() { console.log(this); // Incorrect }
Este comportamiento requiere un enfoque modificado:
// Assign "this" to a variable (i.e., abc) and use the variable instead var abc = this; function xyz() { console.log(abc); // Correct }
al alias "esto" con ABC, se conserva el acceso del cierre al alcance de la instancia prevista. Esta técnica es aplicable a otros pseudo-variables, como "argumentos".
por lo tanto, mientras que el método de alias "auto" es funcional, la alternativa de asignar explícitamente y hacer referencia a "esto" a una variable ofrece una solución más convencional y sólida a la cuestión de alcance en las funciones de callación de eventos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3