DevPath · Aprenda a programar ESPTEN

Objetos

Métodos e this

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: this nã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, this fica órfão e deixa de apontar para esse objeto:

const f = pessoa.saudar;
f(); // this já não é pessoa → this.nome seria undefined

Veremos como fixar this (com bind, 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 usem this, 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
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Literais de objeto e acesso a propriedadesPercorrer objetos: keys, values e entries →