JavaScript POO Intermediário
Classes
Em JavaScript, classes são uma forma de criar objetos com propriedades e métodos compartilhados, usando a sintaxe class. Elas são açúcar sintático sobre funções construtoras e herança prototípica, mas trazem uma estrutura mais clara e organizada para programação orientada a objetos.
O método especial constructor é chamado ao criar uma instância com new e serve para inicializar as propriedades. Dentro da classe, podemos definir métodos (funções) e getters (acessores) que permitem ler valores calculados ou controlar o acesso a propriedades.
A herança é feita com extends, e a palavra-chave super permite chamar o construtor ou métodos da classe pai. Isso facilita a reutilização de código e a criação de hierarquias de classes.
Para encapsulamento real, o JavaScript moderno oferece campos privados com #. Eles só podem ser acessados dentro da própria classe, garantindo que detalhes internos não sejam modificados externamente.
Pontos-chave
constructoré chamado automaticamente ao instanciar comnewe define as propriedades iniciais.- Métodos são funções da classe; getters usam
gete são acessados como propriedades. extendscria uma subclasse;superchama o construtor ou métodos da classe pai.- Campos privados com
#só são acessíveis dentro da própria classe. - Classes não sofrem hoisting: devem ser declaradas antes do uso.
// Exemplo completo de classes em JavaScript
class Animal {
#nome; // campo privado
constructor(nome) {
this.#nome = nome;
}
get nome() {
return this.#nome;
}
falar() {
return `${this.#nome} faz um som.`;
}
}
class Cachorro extends Animal {
constructor(nome, raca) {
super(nome); // chama o construtor da classe pai
this.raca = raca;
}
falar() {
return `${this.nome} late!`; // usa getter da classe pai
}
get descricao() {
return `${this.nome} é um ${this.raca}.`;
}
}
const rex = new Cachorro('Rex', 'Labrador');
console.log(rex.falar()); // Rex late!
console.log(rex.descricao); // Rex é um Labrador.
console.log(rex.nome); // Rex
// console.log(rex.#nome); // Erro: campo privado não acessível fora da classe