this
es una palabra clave en JavaScript que se utiliza para referirnos a las propiedades de un objeto. Por ejemplo:name
desde el método greet
es utilizando la palabra clave this
:this
this
es que las funciones en JavaScript se pueden mover de un lado a otro: se pueden asignar a variables, pasar como argumento de otra función y retornar desde otra función. La pregunta es qué le pasa a this
cuando ocurre todo este movimiento.greet
del objeto person
(ejemplo anterior) a una nueva variable hello
?this
cambia según el lugar desde el que se invoque:this
se refiere a las propiedades del objeto (el caso normal).this
se refiere al contexto global (el objeto window
en un navegador o undefined
en Node.js).this
se refiere al nuevo objeto creado.this
y es con los métodos call
y apply
.call
y apply
this
al invocar una función. Por ejemplo, imagina que tenemos una función llamada greet
que utiliza this
internamente, podemos utilizar call
para cambiar el contexto de this
al invocarla:call
y apply
es la forma en que se pasan los argumentos de la función: apply
recibe los argumentos como un arreglo, mientras que call
los recibe como argumentos independientes. Por ejemplo:bind
bind
podemos garantizar que un método siempre se invoque en un contexto específico. Por ejemplo:bind
devuelve una nueva función que encapsula a la original para garantizar que siempre se ejecute con el contexto que queremos. En este ejemplo estamos sobrescribiendo la variable greet
pero hubiésemos podido asignarla a una variable diferente.this
enlazado al lugar donde son defininidas, independiente de cómo se llamen. Veamos un ejemplo.greet
para que imprima el saludo después de 1 segundo utilizando la función setTimeout
, que nos permite ejecutar una función después del tiempo que le digamos:greet
obtendremos un resultado inesperado:setTimeout
invoca la función desde el contexto global y por lo tanto la referencia original de this
se pierde.this
a una variable con otro nombre:this
enlazado al lugar donde se definió:greet
, cuyo contexto es el objeto person
.