7.8.7 - Classes e Objetos
🏛️ Classes em JavaScript — Por trás da cortina
🏛️ Classes em JavaScript — Por trás da cortina
JavaScript tem uma carinha nova com class, mas por dentro… é o bom e velho sistema de protótipos! 🧠
Ou seja, as classes são só uma forma mais moderna e organizada de escrever o que antes era feito com funções construtoras + prototype.
✨ Diferença entre class e prototype
class e prototypeAmbos funcionam, mas a sintaxe class foi criada para parecer com outras linguagens como Java ou Python — mais limpa e fácil de entender.
Por baixo dos panos:
class Pessoa {
falar() {
console.log("Oi!");
}
}É quase igual a:
function Pessoa() {}
Pessoa.prototype.falar = function () {
console.log("Oi!");
};Mesmo efeito, escrita diferente! 🎭
🧱 Definindo propriedades e métodos com class
class🔄 constructor()
constructor()É o método especial que roda automaticamente quando a classe é instanciada com new.
🧍 Classe e instância
➡️ meuCarro é uma instância da classe Carro.
🔐 Campos públicos e privados
🌐 Públicos (acessíveis de fora):
🔒 Privados (não acessíveis de fora):
⚠️ Campos privados usam
#e só podem ser acessados dentro da própria classe.
📥 Campos de acesso: get e set
get e setControlam a leitura e modificação de propriedades:
🧠 O this dentro de classes
this dentro de classesO this sempre se refere à instância da classe:
🧪 Usando funções no construtor vs métodos da classe
❌ Funções dentro do constructor (menos performático):
Cada instância terá sua própria cópia de falar.
✅ Melhor: declarar como método da classe
Mais leve e compartilhado via protótipo.
💡 Hoisting e Class Expressions
As classes não são içadas (hoisting) como funções. Você não pode usar antes de declarar.
🧾 Observação: Class Expressions — anônimas e nomeadas
Você já viu classes declaradas assim? 👇
Essa é a forma mais comum — declaração de classe. Mas também podemos criar expressões de classe, que funcionam de maneira parecida às funções anônimas ou funções com nome.
🟢 Class Expression Anônima
✅ A classe não tem nome interno, só é acessada pela constante Animal.
🟡 Class Expression Nomeada
Você pode pensar: “Mas por que colocar nome se já tem Veiculo?” 🤔
Boa pergunta! A resposta:
➡️ O nome Carro só existe dentro da própria classe — útil para recursividade ou debug (erros com nome da classe).
❗Mas fora da classe, Carro não existe:
.nameé uma propriedade padrão em funções e classes no JavaScript, e no caso de class expressions nomeadas, ela é automaticamente definida com o nome fornecido na definição da classe.Quando a classe não tem um nome explícito, o JavaScript infere o nome da função com base na variável que a armazena.
🧠 Quando usar class expressions?
✅ São úteis para:
Criar classes dinâmicas (ex: dentro de funções ou retornos)
Injetar comportamentos diferentes de forma mais flexível
Evitar poluir o escopo com nomes globais
📌 Resumo de Class Expression:
Você pode criar class expressions com ou sem nome.
Anônimas: mais simples, usadas em variáveis.
Nomeadas: úteis para identificar melhor no debug.
O nome não é acessível fora da classe.
🧬 Herança com extends e super()
extends e super()🔁 Isso é método sobrescrito (override).
🧪 instanceof
instanceofUsado para verificar se um objeto é instância de uma classe:
⚙️ Campos e métodos estáticos
⚠️ Não são acessíveis pelas instâncias, só pela própria classe.
⚡ Bloco de inicialização estático
Código que roda uma vez só quando a classe é carregada:
🧱 Classes privadas e propriedades estáticas privadas
🧠 Como tudo isso funciona por trás?
Lembre-se: classes são só açúcar sintático. Por trás, o JavaScript ainda usa:
Protótipos
Referências de memória
Herança via
[[Prototype]](a cadeia prototípica)
📌 Resumo final:
class
Forma moderna de declarar objetos
constructor()
Inicializa o objeto
this
Se refere à instância
extends + super()
Herança de outra classe
static
Pertence à classe, não à instância
Campos privados
Usam #
Métodos públicos
Acessíveis em toda instância
instanceof
Verifica herança
Atualizado


