Métodos: Objetos com Vida Própria

O que vais aprender nesta aula:

  • O que é um Método (Função dentro de um Objeto)
  • A palavra-chave this (O Contexto)
  • Como o objeto pode falar sobre si mesmo

🧠 Teoria (com Analogia e Contexto Real)

Até agora, os nossos objetos eram cadernos estáticos (tinham dados). Mas na vida real, um "Gato" não tem só "cor" e "peso". Ele também "mia", "corre" e "salta".

🦸‍♂️ Analogia do Super-Herói

Propriedades: Nome (Super-Homem), Capa (Vermelha). São dados (substantivos).

Métodos: Voar(), Lutar(), Salvar(). São ações (verbos).

This: Quando o Super-Homem diz "A minha capa", ele está a usar o this. "Minha" refere-se a ELE PRÓPRIO.

💻 Prática (Orientada e Progressiva)

Vamos dar vida ao código:

Exemplo 1: Criar um Método

let cao = {
    nome: "Boby",
    ladrar: function() {
        console.log("Au Au!");
    }
};

cao.ladrar(); // "Au Au!"

Exemplo 2: Usar o `this`

O this permite ao objeto aceder aos seus próprios dados.

let pessoa = {
    nome: "Maria",
    saudar: function() {
        // "Eu sou a " + o_meu_próprio_nome
        console.log("Olá, eu sou a " + this.nome);
    }
};

pessoa.saudar(); // "Olá, eu sou a Maria"

Exemplo 3: Mas e se mudar o nome?

pessoa.nome = "Joana";
pessoa.saudar(); // "Olá, eu sou a Joana"
// (A função adaptou-se automaticamente porque usou o this!)
⚠️
Aviso Importante: NÃO uses Arrow Functions () => {} como métodos se precisares do this. As Arrow Functions não sabem quem é o this (elas são "burras" nesse aspeto). Usa sempre function() normal dentro de objetos.

✅ Verificação de Conhecimento

1. O que é um "Método" em JavaScript?

Uma variável especial.
Uma função que vive dentro de um objeto.
Um tipo de array.

2. Para que serve a palavra `this` dentro de um método?

Para referir o próprio objeto dono da função.
Para aceder a variáveis globais.
Não serve para nada.

3. Devo usar Arrow Functions para métodos com `this`?

Sim, são mais modernas.
Nunca, porque o `this` não funciona nelas como esperado.
Tanto faz.

🧩 Desafio Prático

A Conta Bancária Simplificada

Cria um objeto conta com:

- Propriedade saldo (começa em 100).

- Método verSaldo() que mostra "Tens X euros."

- Método depositar(valor) que aumenta o saldo.

let conta = {
    saldo: 100,
    verSaldo: function() { ... },
    depositar: function(valor) { ... }
};

conta.depositar(50);
conta.verSaldo(); // Deverá dizer 150
Mostrar Solução
let conta = {
    saldo: 100,
    verSaldo: function() {
        console.log("Tens " + this.saldo + " euros.");
    },
    depositar: function(valor) {
        this.saldo = this.saldo + valor;
        // Ou: this.saldo += valor;
    }
};

conta.depositar(50);
conta.verSaldo(); // "Tens 150 euros."

📌 Explicação: O segredo foi usar this.saldo para ler e alterar o valor da carteira do próprio objeto.