Fácil JavaScript

Criando um objeto com protótipo

Enunciado

Use Object.create para criar um objeto carro que herda de veiculo. O objeto veiculo deve ter um método descrever() que retorna "Veículo genérico". O carro deve ter uma propriedade modelo e sobrescrever descrever() para retornar "Carro: <modelo>". Imprima o resultado de carro.descrever() e verifique se Object.getPrototypeOf(carro) === veiculo.

Requisitos

  • Usar Object.create para criar carro.
  • veiculo deve ter o método descrever.
  • carro deve ter a propriedade modelo e sobrescrever descrever.
  • Imprimir o resultado de carro.descrever() e a verificação do protótipo.

Código inicial

// Crie o objeto veiculo

// Crie o objeto carro com Object.create

// Imprima os resultados

Saída esperada

Carro: Fusca
true
Ver dica

Lembre-se: Object.create(veiculo) cria um novo objeto cujo protótipo é veiculo. Depois adicione a propriedade modelo e o método descrever diretamente no carro.

Mostrar solução
// Objeto base
const veiculo = {
  descrever() {
    return 'Veículo genérico';
  }
};

// Cria carro herdando de veiculo
const carro = Object.create(veiculo);
carro.modelo = 'Fusca';
carro.descrever = function() {
  return `Carro: ${this.modelo}`;
};

console.log(carro.descrever());
console.log(Object.getPrototypeOf(carro) === veiculo);

Passo a passo

  1. Definimos veiculo como um objeto literal com o método descrever.
  2. Usamos Object.create(veiculo) para criar carro com veiculo como protótipo.
  3. Adicionamos a propriedade modelo diretamente em carro.
  4. Sobrescrevemos descrever em carro para usar this.modelo.
  5. Imprimimos carro.descrever(), que usa o método próprio.
  6. Verificamos que o protótipo de carro é veiculo com Object.getPrototypeOf.

Por que funciona

Object.create estabelece a cadeia de protótipos: carro herda de veiculo. Como carro tem seu próprio descrever, a busca para no objeto antes de subir a cadeia. A verificação confirma que a herança foi configurada corretamente.

Erros comuns

  • Esquecer de usar Object.create e fazer const carro = veiculo — isso não cria herança, apenas uma referência ao mesmo objeto.
  • Usar carro.prototype em vez de Object.getPrototypeOf(carro) — prototype não existe em objetos comuns.
  • Não sobrescrever descrever e esperar que modelo apareça — o método herdado não conhece modelo.

Outra forma de resolver

Poderia usar class:

class Veiculo { descrever() { return 'Veículo genérico'; } }
class Carro extends Veiculo {
  constructor(modelo) { super(); this.modelo = modelo; }
  descrever() { return `Carro: ${this.modelo}`; }
}

Mas Object.create é mais direto para herança prototípica pura.

Saída esperada

Carro: Fusca
true