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 moldeconstructor(...)→ executa quando criamos um novo objetothis→ aponta para a instância atualexibirResumo()→ 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 controladaset→ 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
newao instanciar - Tentar chamar método de instância na classe
- Confundir método
staticcom 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.
constructordefine valores iniciais da instância.- Métodos de classe são compartilhados entre objetos.
get,setestatictrazem mais organização e controle.- Classes deixam mais fácil evoluir para herança.