7.8.5 - Classes e Objetos
🧬 Nível 2: Herança e Corrente de Protótipos em JavaScript
🧬 Nível 2: Herança e Corrente de Protótipos em JavaScript
Quando você ouve "herança", talvez pense em pais e filhos — e é bem por aí mesmo! 🧒👨🦳 Em JavaScript, objetos herdam propriedades e métodos uns dos outros por meio de algo chamado corrente de protótipos (ou prototype chain).
🔗 O que é uma Corrente de Protótipos?
Sempre que você tenta acessar uma propriedade ou método em um objeto, o JavaScript procura:
No próprio objeto;
No seu protótipo;
No protótipo do protótipo;
E assim por diante, até chegar em
null.
📦 É como subir degrau por degrau até encontrar o que você pediu (ou cair da escada 😅).
🧱 Criando e Mutando Correntes de Protótipos
Existem várias formas de criar ou mudar a corrente de protótipos. Vamos ver as principais:
✅ Object.create()
A forma mais recomendada!
✅ Prós:
Clareza e controle
Mantém herança limpa
Não interfere em objetos existentes
🚫 Contras:
Sem suporte a
constructordiretamentePrecisa criar propriedades depois
🛠️ Object.setPrototypeOf(obj, prototipo)
Define um novo protótipo depois que o objeto já foi criado.
✅ Útil para alterar a herança de um objeto existente 🚫 Desvantagens:
⚠️ Mais lento em performance
Pode confundir a leitura do código
🔍 Object.getPrototypeOf(obj)
Serve para ver quem é o protótipo de um objeto:
🧠 Propriedades de Funções? Como assim?
Em JavaScript, funções são objetos também! Isso significa que você pode fazer coisas como:
📌 prototype de funções
prototype de funçõesCada função em JS recebe, por padrão, uma propriedade chamada prototype.
Ela é usada quando você cria objetos com new.
🧪
maria.__proto__ === Pessoa.prototype→trueIsso forma a corrente de protótipos! 🔗
🏗️ Vantagens e Desvantagens das Abordagens
Object.create()
Claro, limpo, controlado
Sem constructor, mais verboso
setPrototypeOf()
Altera objetos já existentes
⚠️ Performance ruim
class e extends
Sintaxe moderna e clara
Abstrai o comportamento real
new com prototype
Controla comportamento e memória
Mais código, mas altamente eficiente
⚙️ Performance da Corrente de Protótipos
🔍 Quanto mais longa a cadeia, mais demorada será a busca por métodos/propriedades.
Por isso, evite criar correntes muito profundas! Se possível, mantenha sua hierarquia simples. Se precisar otimizar, defina propriedades no próprio objeto quando usadas com frequência.
📦 Recapitulando
prototypeé onde métodos compartilhados ficamO operador
newusaprototypepara herdarPodemos acessar ou alterar protótipos com
getPrototypeOfesetPrototypeOfA corrente de protótipos termina quando chega em
nullHerança em JS é poderosa, mas deve ser usada com clareza 🧠
Atualizado


