this en JavaScript
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
¡Claro! Te voy a explicar cómo funciona this en JavaScript usando los tres ejemplos que me diste.
La clave está en cómo se define la función y cómo se llama.
📌 Ejemplo 1 (archivo this.png)
calcularTotal: function () {
console.log('THIS', this)
}Aquí calcularTotal es una función normal (function).
Cuando llamas a item1.calcularTotal(), this es el objeto que está antes del punto, o sea item1.
✅ Resultado: this → item1
📌 Ejemplo 2 (archivo this2.png)
calcularTotal: () => {
console.log(this)
}Aquí calcularTotal es una función flecha (=>).
Las funciones flecha no tienen su propio this, sino que heredan el this del ámbito donde fueron definidas (contexto léxico).
Como item1 se define en el ámbito global (fuera de cualquier función), el this heredado es el objeto global (window en navegador, global en Node.js).
✅ Resultado: this → objeto global (no item1)
📌 Ejemplo 3 (archivo this-es item uno.png)
Aquí calcularTotal en item1 vuelve a ser función normal:
calcularTotal: function () {
console.log('THIS', this)
}Pero en factura.calcularTotal está definido como función flecha:
calcularTotal: () => {
const total1 = item1.calcularTotal()
return total1;
}Cuando haces factura.calcularTotal(), como es función flecha, no modifica el this interno de item1.calcularTotal.
Dentro de item1.calcularTotal, this sigue siendo item1 porque la forma de llamada es item1.calcularTotal().
✅ Resultado: this → item1 otra vez.
🔁 Resumen rápido
| Tipo de función | ¿Cuál es this? |
|---|---|
function normal | El objeto antes del punto al llamarla |
función flecha => | El this del lugar donde se escribió (contexto léxico) |
💡 Consejo final
Usa
functionsi quieres quethissea el objeto que llama al método.Usa flecha si quieres mantener el
thisdel exterior (por ejemplo, dentro de unsetTimeouto un callback).
¿Quieres que veamos también cómo calcular el total correctamente con impuestos usando this?
¡Excelente pregunta! Vamos a lo básico. this es una palabra clave especial en JavaScript que hace referencia a un objeto.
La gran pregunta es: ¿a qué objeto?
La respuesta depende de cómo se llama la función (no de dónde se escribe, excepto en las funciones flecha).
🎯 La regla de oro (para funciones normales)
thises el objeto que está antes del punto cuando llamas a la función.
Ejemplo sencillo:
const persona = {
nombre: "Ana",
saludar: function() {
console.log(this.nombre);
}
};
persona.saludar(); // "Ana"
// ↑ el objeto antes del punto es 'persona', entonces this = personathis apunta a persona porque persona es quien está llamando a saludar.
🧠 Entiéndelo así
Imagina que this es como decir "este objeto" o "yo mismo" dentro de un método:
const perro = {
nombre: "Rex",
ladrar: function() {
console.log(this.nombre + " dice: ¡Guau!");
}
};
perro.ladrar(); // "Rex dice: ¡Guau!"
// this = perro (el dueño del método)⚠️ ¿Qué pasa si no hay objeto antes del punto?
function hola() {
console.log(this);
}
hola(); // objeto global (window en navegador, global en Node)Si llamas a la función "suelta", sin punto, this es el objeto global (o undefined en "strict mode").
🆚 Diferencia clave con funciones flecha
Las funciones flecha no tienen su propio this. Ellas toman prestado el this del lugar donde fueron escritas.
const obj = {
nombre: "Obj",
normal: function() {
console.log(this.nombre); // this = obj
},
flecha: () => {
console.log(this.nombre); // this = lo de afuera (global)
}
};
obj.normal(); // "Obj"
obj.flecha(); // undefined (porque el this global no tiene 'nombre')🎓 En resumen
| Término | Significado simple |
|---|---|
this | "El objeto que está llamando a esta función" |
Si haces
objeto.metodo()→this=objetoSi haces
metodo()suelto →this= objeto global /undefinedSi es función flecha →
this= el mismothisque había afuera
¿Necesitas que te haga un dibujo o más ejemplos con situaciones del día a día?
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
Comentarios
Publicar un comentario