this
cada vez que invocamos una funcion, se crea un puntero a una variable llamada this
. El valor de this
es el del objeto inmediatamente a la izquierda de la funcion que hemos invocado. veamos algunos ejemplos
const person = {
name: "Horacio",
saludo() {
return `Hola ${this.name}!`;
},
};
console.log(person.saludo()); // Hola Horacio!
saludo
tiene una referencia al objeto this
. Como fue llamada desde el objeto person
, podemos asegurar que this
se refiere al objeto person
como podemos ver en el resultado del console.log()
.this
va a apuntar sólo al ver la definición de la función, necesitas ver cómo ha sido llamada para poder determinar su valor.Hay 3 preguntas que nos podemos hacer para identificar que es this
cada vez que veamos la invocación de una función:
viendo el ejemplo anterior, podemos responder las preguntas así:
()
un enlazada implícitamente (implicit binding)person
el objeto a la izquierda de cualquier función declarada en el contexto global es window
, aunque en algunos casos no lo veamos.
Si cambiamos nuestro ejemplo de funcion a una funcion de flecha ( [[javascript-funciones-flecha]] ) veremos un comportamiento distinto, gracias al Ambito Lexico ( [[javascript-scopes]] )
this
en un contexto global varia dependiendo de donde estemos:
window
global
node index.js
): module.exports
undefined
. esto es para evitar que contaminemos el scope ( [[javascript-scopes]] ) global con valores de nuestro programa.this
en constructores
new
, el valor de this se le asigna a un nuevo objeto creado que tendra asociado el prototipo ( [[javascript-herencia-de-prototipos]] ) de la funcion creada.null
de un constructor, este se ignora y devuelve en su lugar el objeto asociado a this
(el nuevo objeto creado)