Classes (ES6): uma sintaxe mais moderna para funções construtoras

Conheça a sintaxe de classes introduzida no ES6, que torna a criação de 'moldes' mais familiar para quem vem de outras linguagens.

Até aqui, você viu funções construtoras e protótipos.
As classes (ES6) chegaram para deixar essa ideia mais legível e organizada.

Pense assim:

  • função construtora + prototype = jeito clássico
  • class = jeito moderno de escrever a mesma lógica

Importante: classes em JavaScript não substituem protótipos por baixo dos panos.
Elas são uma sintaxe mais amigável para trabalhar com POO.


Por que usar classes?

  • Código mais limpo e fácil de ler
  • Estrutura familiar para quem já viu POO em outras linguagens
  • Melhor organização de propriedades e métodos
  • Facilita trabalhar com herança (extends), que veremos na próxima lição

Estrutura básica de uma classe

class Produto {
  constructor(nome, preco) {
    this.nome = nome;
    this.preco = preco;
  }

  exibirResumo() {
    return `${this.nome} - R$ ${this.preco}`;
  }
}

O que cada parte faz?

  • class Produto → define o molde
  • constructor(...) → executa quando criamos um novo objeto
  • this → aponta para a instância atual
  • exibirResumo() → método compartilhado entre instâncias

Criando objetos com new

const p1 = new Produto("Teclado", 200);
const p2 = new Produto("Mouse", 90);

console.log(p1.exibirResumo());
console.log(p2.exibirResumo());

Cada instância tem seus próprios dados (nome, preco),
mas compartilha os métodos da classe.


Comparando com função construtora

Jeito clássico (construtora)

function Produto(nome, preco) {
  this.nome = nome;
  this.preco = preco;
}

Produto.prototype.exibirResumo = function () {
  return `${this.nome} - R$ ${this.preco}`;
};

Jeito com class

class Produto {
  constructor(nome, preco) {
    this.nome = nome;
    this.preco = preco;
  }

  exibirResumo() {
    return `${this.nome} - R$ ${this.preco}`;
  }
}

Resultado prático parecido, mas com sintaxe mais clara.


Getter e Setter (controle de leitura e escrita)

Classes permitem criar acessos especiais:

class Usuario {
  constructor(nome) {
    this._nome = nome;
  }

  get nome() {
    return this._nome;
  }

  set nome(novoNome) {
    if (!novoNome) return;
    this._nome = novoNome;
  }
}
  • get → leitura controlada
  • set → escrita validada

Método estático (static)

Método estático pertence à classe, não à instância.

class Calculadora {
  static somar(a, b) {
    return a + b;
  }
}

console.log(Calculadora.somar(2, 3)); // 5

Você chama em Calculadora.somar, não em new Calculadora().


Erros comuns ao começar com classes

  • Esquecer de usar new ao instanciar
  • Tentar chamar método de instância na classe
  • Confundir método static com método normal
  • Não inicializar propriedades no constructor

Resumo da lição

  • Classes (ES6) são uma forma moderna de escrever POO em JavaScript.
  • constructor define valores iniciais da instância.
  • Métodos de classe são compartilhados entre objetos.
  • get, set e static trazem mais organização e controle.
  • Classes deixam mais fácil evoluir para herança.