Page cover

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

Ambos 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

🔄 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

Controlam a leitura e modificação de propriedades:


🧠 O this dentro de classes

O 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()

🔁 Isso é método sobrescrito (override).


🧪 instanceof

Usado 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:

Conceito
Explicação rápida

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