1. Literais de objeto
snippetJavaScript
const jogador = { nome: "Alice", atacar() { return `${this.nome} ataca!`; } };console.log(Object.getPrototypeOf(jogador) === Object.prototype); // true
2. Object.create()
Cria objeto com protótipo específico — sem chamar construtor:
snippetJavaScript
const prototipoAnimal = { falar() { return `${this.nome} faz um som.`; }, comer(comida) { return `${this.nome} come ${comida}.`; }}; const cachorro = Object.create(prototipoAnimal);cachorro.nome = "Rex";console.log(cachorro.falar()); // "Rex faz um som."
Sem protótipo — passe null para dicionários seguros:
snippetJavaScript
const dicionario = Object.create(null);console.log("toString" in dicionario); // false// Sem colisão com hasOwnProperty herdado
3. Operador new — 4 passos
snippettext
1. Criar objeto vazio2. Ligar [[Prototype]] a Construtor.prototype3. Executar construtor com this = novo objeto4. Retornar objeto (salvo retorno explícito de objeto)
snippetJavaScript
function Jogador(nome, vida) { this.nome = nome; this.vida = vida;}Jogador.prototype.atacar = function() { return `${this.nome} ataca!`; }; const alice = new Jogador("Alice", 100);console.log(alice.atacar()); // "Alice ataca!"
Simulando new:
snippetJavaScript
function meuNew(Construtor, ...args) { const obj = Object.create(Construtor.prototype); const resultado = Construtor.apply(obj, args); return (resultado !== null && typeof resultado === "object") ? resultado : obj;}
4. Object.assign() — cópia superficial
snippetJavaScript
const padroes = { tema: "claro", fonte: 14 };const prefs = { tema: "escuro" };const config = Object.assign({}, padroes, prefs);console.log(config); // { tema: "escuro", fonte: 14 }
snippetJavaScript
const original = { nome: "Alice", scores: [90, 85] };const clone = Object.assign({}, original);clone.scores.push(100);console.log(original.scores); // [90, 85, 100] — array compartilhado! const deep = structuredClone(original); // clone profundo
Object.assign copia apenas propriedades próprias enumeráveis — não herdadas nem não-enumeráveis.