La publicación de Remy Sharp es confusa si no la lees detenidamente, en mi opinión. El significado de this
nunca cambia. En el ejemplo que dio, hubo 2 usos de this
. Como un elemento DOM en un evento:
$('a').click(function() {
alert(this.tagName);
});
y envuelto como un objeto jQuery en un evento:
$('a').click(function() {
alert($(this).val());
});
Si usted lee los 2 fragmentos anteriores con mucho cuidado se dará cuenta de que nunca cambia this
significado . Siempre se refiere al elemento DOM. La diferencia viene en cómo se usa.
En jQuery, de forma predeterminada, this
se refiere al elemento DOM (no un objeto jQuery) que desencadenó un evento. En el segundo fragmento de código anterior, es todavía el mismo elemento DOM, sólo que es envuelto en un elemento de jQuery envolviendo $()
alrededor de ella. Al igual que con cualquier argumento para el constructor jQuery, pasar this
al constructor lo transforma en un objeto jQuery.
Creo que la confusión aparece cuando Remy comienza a hablar sobre los complementos jQuery en el mismo artículo que los eventos de jQuery. Los complementos de jQuery son algo que las personas rara vez escriben y usan con frecuencia. Al escribir un plugin jQuery, estás trabajando en el contexto del prototipo de objeto jQuery.En este caso, está usando la palabra this
para referirse al complemento que está escribiendo. En casos de uso normales, no escribirás complementos a menudo, por lo que este es un escenario mucho menos común. Cuando no está dentro del alcance del complemento, no puede usar this
para referirse al objeto jQuery.
En el lenguaje JavaScript, la palabra clave this
se refiere a la instancia actual de un objeto en JavaScript. Cuando se utiliza en un prototipo de JavaScript, se refiere a la instancia del prototipo. Dependiendo del navegador, cuando se utiliza el modelo de evento no-jquery, this
también se refiere al elemento DOM. Debido a que algunos navegadores (Internet Explorer) no hacen referencia al this
como el elemento DOM en un evento, dificulta el trabajo con eventos. Para evitar esto, jQuery realiza algo de magia de JavaScript que siempre hace que this
se refiera al elemento DOM que desencadenó el evento. Esa es (una de las muchas) razones para usar un marco de JavaScript en lugar de hacer el suyo propio.