7.8.2 - Classes o Objetos
🧬 Protótipos em JavaScript — Como os Objetos Realmente Funcionam?
🧬 Protótipos em JavaScript — Como os Objetos Realmente Funcionam?
Agora que você já entende objetos, vamos abrir a caixa preta 🔍 e descobrir como eles funcionam por dentro no JavaScript. Bora descobrir o que são protótipos e por que eles são tão importantes?
🧠 Como os Objetos Funcionam no Computador?
Quando você cria um objeto em JavaScript, ele não é apenas uma caixinha com dados. Ele também herda comportamentos de outro objeto, chamado de protótipo.
🧩 Isso significa que, se você tentar acessar algo que não está no seu objeto, o JavaScript vai procurar no protótipo dele. E se não encontrar lá, procura no protótipo do protótipo… criando uma cadeia de protótipos.
🛠️ Formas de Criar Objetos
Você pode criar objetos de várias formas em JavaScript:
// Objeto literal
const pessoa = {
nome: "João"
};
// Usando o construtor Object()
const pessoa1 = new Object(); // cria um objeto vazio
const pessoa2 = new Object({
name: 'Chris',
age: 38,
greeting: function() {
alert('Hi! I\'m ' + this.name + '.');
}
});
// Usando Object.create()
const animal = Object.create(null);
// Usando uma função construtora + new
function Carro(marca) {
this.marca = marca;
}
const meuCarro = new Carro("Fiat");🧬 O que é um Protótipo?
Todo objeto em JavaScript tem um protótipo — um outro objeto do qual ele herda métodos e propriedades.
🧐 Mas você não criou toString()! Esse método veio do protótipo padrão do JavaScript: Object.prototype.
🔗 Cadeia de Protótipos (Prototype Chain)
Imagine uma escada 🪜:
meuCarronão temtoString()?Ele sobe até
Carro.prototypeNão tem lá também? Vai até
Object.prototypeAinda não? Chega em
null(fim da linha)
🔁 Prototype vs. __proto__
Esses dois termos são parecidos, mas têm usos diferentes:
__proto__
Aponta para o protótipo do objeto
obj.__proto__
prototype
Usado em funções construtoras para definir o protótipo das instâncias que serão criadas
Func.prototype
🏗️ Funções Construtoras + new
newUma função construtora cria novos objetos com protótipos definidos:
🔹 Aqui, dizerNome não está em maria, está no Pessoa.prototype.
🧠 O objeto acessa esse método pela cadeia de protótipos, sem copiar nada.
🪄 Herança com Object.create()
Quer criar um objeto e dizer qual será seu protótipo? Use Object.create():
👉 bicicleta herda tudo de veiculo, mas ainda é um objeto separado.
🧬 A propriedade constructor
constructorTodo objeto criado com uma função construtora guarda uma referência à função original:
Isso é útil para saber qual "molde" criou o objeto.
🧰 Adicionando ao Protótipo
Você pode adicionar métodos depois que a função já foi criada:
🧠 Assim, todas as instâncias da função Pessoa terão acesso ao novo método — sem precisar editar o construtor.
🧪 Definindo Propriedades no Construtor vs. no Protótipo
Dentro do constructor
✅ Sim, é exclusivo de cada instância
Sim
Dentro de prototype
❌ Compartilhado entre todos
Não
📌 Padrão Comum: Métodos no Prototype
📦 Esse padrão economiza memória: todos os produtos usam o mesmo método, sem duplicação.
🌟 Resumo Rápido
Objetos têm um protótipo que serve como modelo
JavaScript é uma linguagem baseada em protótipos
Protótipos formam uma cadeia de herança
Métodos e propriedades são acessados, não copiados
Use
new,Object.create(),__proto__,prototypepara controlar heranças e comportamentos
🔍 Quer ver protótipos em ação?
📌 Isso funciona porque "texto" é um objeto String, e herdou o método toUpperCase() do String.prototype!
🧭 Conclusão
Entender protótipos é como descobrir os bastidores do JavaScript! 🎭 Com esse conhecimento, você consegue entender como as coisas realmente funcionam, economizar memória, reaproveitar código e criar sistemas organizados.
Atualizado


