this en JavaScript

 ¡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)

js
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: thisitem1


📌 Ejemplo 2 (archivo this2.png)

js
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:

js
calcularTotal: function () {
  console.log('THIS', this)
}

Pero en factura.calcularTotal está definido como función flecha:

js
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: thisitem1 otra vez.


🔁 Resumen rápido

Tipo de función¿Cuál es this?
function normalEl objeto antes del punto al llamarla
función flecha =>El this del lugar donde se escribió (contexto léxico)

💡 Consejo final

  • Usa function si quieres que this sea el objeto que llama al método.

  • Usa flecha si quieres mantener el this del exterior (por ejemplo, dentro de un setTimeout o un callback).

¿Quieres que veamos también cómo calcular el total correctamente con impuestos usando this?

pero que es tuis

¡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)

this es el objeto que está antes del punto cuando llamas a la función.

Ejemplo sencillo:

js
const persona = {
  nombre: "Ana",
  saludar: function() {
    console.log(this.nombre);
  }
};

persona.saludar(); // "Ana"
// ↑ el objeto antes del punto es 'persona', entonces this = persona

this 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:

js
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?

js
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.

js
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érminoSignificado simple
this"El objeto que está llamando a esta función"
  • Si haces objeto.metodo()this = objeto

  • Si haces metodo() suelto → this = objeto global / undefined

  • Si es función flecha → this = el mismo this que había afuera


¿Necesitas que te haga un dibujo o más ejemplos con situaciones del día a día?

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

n-funcion - el botón-n

Objetos básicos en JavaScript