Métodos: funções dentro de objetos
Até agora seus objetos só guardavam dados. Mas eles também podem agir: uma propriedade cujo valor é uma função se chama método, e é o que permite que o objeto "faça coisas" em vez de só armazená-las:
const calculadora = {
somar: function (a, b) {
return a + b;
},
// sintaxe abreviada (ES6):
subtrair(a, b) {
return a - b;
},
};
console.log(calculadora.somar(2, 3)); // 5
console.log(calculadora.subtrair(7, 4)); // 3
A palavra this
E como um método acessa os dados do seu próprio objeto? Com this. Dentro de um
método, this aponta para o objeto através do qual o método é chamado. No
caso normal, objeto.metodo(), esse objeto é o da esquerda do ponto, então
this é como dizer "eu mesmo": te dá acesso às suas outras propriedades.
const pessoa = {
nome: "Ana",
saudar() {
return "Olá, eu sou " + this.nome;
},
};
console.log(pessoa.saudar()); // "Olá, eu sou Ana"
⚠️ Pegadinha clássica:
thisnão depende de onde o método é definido, e sim de como é chamado. Se você "tirar" o método do seu objeto e chamá-lo solto,thisfica órfão e deixa de apontar para esse objeto:const f = pessoa.saudar; f(); // this já não é pessoa → this.nome seria undefinedVeremos como fixar
this(combind, ou usando classes) no módulo de POO.
Importante: as arrow functions não têm seu próprio
this, por isso, para métodos de objeto que usemthis, costuma-se preferir a sintaxe normal ou a abreviada, não a de flecha.
Exemplos
Uma conta bancária que se modifica a si mesma com this
const conta = {
saldo: 100,
depositar(quantia) {
this.saldo = this.saldo + quantia;
return this.saldo;
},
};
console.log(conta.depositar(50)); // 150
console.log(conta.saldo); // 150