La palabra clave this en JavaScript
En lenguajes orientados a objetos, this representa una referencia al objeto actual.
Pero en JavaScript, this no es fijo; cambia según el entorno de ejecución.
- En un método, this representa el objeto al que pertenece dicho método.
- Si se usa solo, this representa el objeto global.
- En una función, this representa el objeto global.
- En una función, en modo estricto, this es undefined (no definido).
- En un evento, this representa el elemento que recibe el evento.
- Métodos como call() y apply() pueden vincular this a cualquier objeto.
Ejemplo
Pruébalo »
this en métodos
En un método de objeto, this apunta al objeto que invoca el método donde se encuentra.
En el ejemplo anterior, this representa el objeto person.
El objeto al que pertenece el método fullName es person.
Uso de this de forma independiente
Si se usa this solo, apunta al objeto global.
En el navegador, window es el objeto global [object Window]:
En modo estricto, si se usa solo, this también apunta al objeto global.
Uso de this en funciones (por defecto)
En una función, el propietario de la función se vincula a this por defecto.
En el navegador, window es el objeto global [object Window]:
Uso de this en funciones (modo estricto)
En modo estricto, la función no está vinculada a this; en este caso, this esundefined。
this en eventos
En los manejadores de eventos HTML, this apunta al elemento HTML que recibe el evento:
Ejemplo
Pruébalo »
Vinculación en métodos de objetos
En el siguiente ejemplo, this es el objeto person; el objeto person es el propietario de la función:
Ejemplo
Pruébalo »
Ejemplo
Pruébalo »
Explicación:this.firstNamerepresentathisdel objeto (person)firstNamepropiedad.
Vinculación explícita de funciones
En JavaScript, las funciones también son objetos, y los objetos tienen métodos; apply y call son métodos de los objetos de función. Estos dos métodos son extremadamente potentes, ya que permiten cambiar el contexto de ejecución de una función, es decir, el objeto al que está vinculado this.
En el siguiente ejemplo, cuando usamos person2 como argumento para invocar el método person1.fullName,thisthis apuntará a person2, incluso si es un método de person1:
Ejemplo
Pruébalo »