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.

// Definir un objeto item1
const item1 = {
    nombre: "Producto",
    precio: 100,
    cantidad: 3,
    
    // Método con function () {}
    calcularTotal: function () {
        console.log('THIS en function():', this);
        return this.precio * this.cantidad;
    },
    
    // Método con arrow function
    calcularTotalDos: () => {
        console.log('THIS en arrow function:', this);
        return this?.precio * this?.cantidad; // this no funciona igual en arrow functions
    }
};

// Llamar a los métodos correctamente
const total = item1.calcularTotal();
console.log('Total con function():', total);

const totalDos = item1.calcularTotalDos();
console.log('Total con arrow function:', totalDos);
Total con arrow function: NaN
Total con function(): 300

🔁 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