Javascript this: Todo lo que necesitas saber
La palabra clave this
es uno de los conceptos más importantes en Javascript. A menudo puede ser confusa para los desarrolladores que recién comienzan a aprender Javascript, pero es fundamental para escribir código efectivo y legible. En este artículo, explicaremos todo lo que necesitas saber sobre this
en Javascript.
¿Qué es this
?
En Javascript, this
se refiere al objeto actual que se está ejecutando. El objeto actual puede variar según el contexto en el que se utiliza this
.
this
en el contexto global
Cuando this
se usa en el contexto global, se refiere al objeto global. En un navegador, el objeto global es window
. Por lo tanto, en el contexto global, this
es igual a window
.
javascriptCopy codeconsole.log(this === window); // true
this
en funciones
Cuando this
se utiliza en una función, se refiere al objeto que invocó la función. La forma en que se invoca la función determina el valor de this
. Veamos algunos ejemplos para ilustrar esto.
Invocación de función normal
Cuando se invoca una función normal, this
se establece en el objeto global (window
en un navegador).
javascriptCopy codefunction myFunction() {
console.log(this === window);
}
myFunction(); // true
Invocación de método
Cuando se invoca un método en un objeto, this
se establece en el objeto que invocó el método.
javascriptCopy codeconst myObject = {
myMethod() {
console.log(this === myObject);
}
};
myObject.myMethod(); // true
Invocación de constructor
Cuando se crea un objeto a partir de un constructor utilizando la palabra clave new
, this
se establece en el objeto recién creado.
javascriptCopy codefunction MyClass() {
console.log(this);
}
const myInstance = new MyClass(); // MyClass {}
Invocación de call()
y apply()
La función call()
y apply()
se utilizan para invocar una función con un valor de this
explícito.
javascriptCopy codefunction myFunction() {
console.log(this);
}
const myObject = { myProperty: 'value' };
myFunction.call(myObject); // { myProperty: 'value' }
myFunction.apply(myObject); // { myProperty: 'value' }
this
en arrow functions
Las arrow functions son diferentes de las funciones normales en lo que respecta a this
. En una arrow function, this
se hereda del contexto en el que se define la arrow function.
javascriptCopy codeconst myObject = {
myMethod() {
const myArrowFunction = () => {
console.log(this === myObject);
};
myArrowFunction(); // true
}
};
myObject.myMethod();
Consejos para evitar errores con this
A continuación, se presentan algunos consejos para evitar errores comunes con this
en Javascript:
- Usa funciones arrow para preservar el valor de
this
del contexto en el que se define la arrow function. - Utiliza la función
bind()
para enlazar explícitamente el valor dethis
a una función.
javascriptCopy codeconst myObject = {
myMethod() {
console.log(this === myObject);
}
};
const myFunction = myObject.myMethod.bind(myObject);
myFunction();
- Utiliza la variable
that
oself
para hacer referencia al valor dethis
en un contexto diferente.
javascriptCopy codeconst myObject = {
myMethod() {
const that = this;
setTimeout(function() {
console.log(that === myObject);
}, 1000);
}
};
myObject.myMethod();
- Utiliza la función
call()
oapply()
para establecer explícitamente el valor dethis
en una función.
javascriptCopy codefunction myFunction() {
console.log(this === myObject);
}
const myObject = { myProperty: 'value' };
myFunction.call(myObject); // true
Conclusión
this
puede ser un concepto difícil de entender al principio, pero es importante para escribir código efectivo en Javascript. En resumen, this
se refiere al objeto actual que se está ejecutando y puede variar según el contexto en el que se utiliza. Es importante comprender cómo funciona this
en diferentes contextos y utilizar las mejores prácticas para evitar errores comunes. Con estos conocimientos, estarás bien equipado para escribir código Javascript de alta calidad.