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.createpara criarcarro. veiculodeve ter o métododescrever.carrodeve ter a propriedademodeloe sobrescreverdescrever.- 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
- Definimos
veiculocomo um objeto literal com o métododescrever. - Usamos
Object.create(veiculo)para criarcarrocomveiculocomo protótipo. - Adicionamos a propriedade
modelodiretamente emcarro. - Sobrescrevemos
descreveremcarropara usarthis.modelo. - Imprimimos
carro.descrever(), que usa o método próprio. - Verificamos que o protótipo de
carroéveiculocomObject.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.createe fazerconst carro = veiculo— isso não cria herança, apenas uma referência ao mesmo objeto. - Usar
carro.prototypeem vez deObject.getPrototypeOf(carro)—prototypenão existe em objetos comuns. - Não sobrescrever
descrevere esperar quemodeloapareça — o método herdado não conhecemodelo.
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