Métodos: funciones dentro de objetos
Hasta ahora tus objetos solo guardaban datos. Pero también pueden actuar: una propiedad cuyo valor es una función se llama método, y es lo que permite que el objeto "haga cosas" en lugar de solo almacenarlas:
const calculadora = {
sumar: function (a, b) {
return a + b;
},
// sintaxis abreviada (ES6):
restar(a, b) {
return a - b;
},
};
console.log(calculadora.sumar(2, 3)); // 5
console.log(calculadora.restar(7, 4)); // 3
La palabra this
¿Y cómo accede un método a los datos de su propio objeto? Con this. Dentro de
un método, this apunta al objeto a través del cual se llama al método. En
el caso normal, objeto.metodo(), ese objeto es el de la izquierda del punto,
así que this es como decir "yo mismo": te da acceso a sus otras propiedades.
const persona = {
nombre: "Ana",
saludar() {
return "Hola, soy " + this.nombre;
},
};
console.log(persona.saludar()); // "Hola, soy Ana"
⚠️ Trampa clásica:
thisno depende de dónde se define el método, sino de cómo se llama. Si "sacas" el método de su objeto y lo llamas suelto,thisse queda huérfano y deja de apuntar a ese objeto:const f = persona.saludar; f(); // this ya no es persona → this.nombre sería undefinedVeremos cómo fijar
this(conbind, o usando clases) en el módulo de POO.
Importante: las arrow functions no tienen su propio
this, por eso para métodos de objeto que usenthissuele preferirse la sintaxis normal o la abreviada, no la flecha.
Ejemplos
Una cuenta bancaria que se modifica a sí misma con this
const cuenta = {
saldo: 100,
depositar(cantidad) {
this.saldo = this.saldo + cantidad;
return this.saldo;
},
};
console.log(cuenta.depositar(50)); // 150
console.log(cuenta.saldo); // 150