1
resposta

Dúvida na determinação de protótipos para um objeto

Olá!

Acompanhando a aula sobre Object.create() vs new, escrevemos o seguinte código para criar um objeto que herda propriedades e métodos de outro objeto:

function User(nome, email) {
    this.nome = nome;
    this.email = email;

    this.exibirInfos = function () {
        return `${this.nome}, ${this.email}`;
    };
};

function Admin(role) {
    User.call(this, 'Juliana', 'j@j.com');
    this.role = role || 'estudante';
};

Admin.prototype = Object.create(User.prototype);
const novoUser = new Admin('admin');

console.log(novoUser.exibirInfos());
console.log(novoUser.role);

Não entendi bem porque que depois de já ter usado o método call() dentro do objeto Admin ainda foi necessário incluir a linha <Admin.prototype = Object.create(User.prototype);>. Inclusive, comentando essa linha o resultado na execução do programa é o mesmo. Gostaria de entender melhor o que está acontecendo nessa linha de código.

1 resposta

Olá, Anastácia! Tudo bem?

Ótima a sua pergunta! Vamos lá:

A linha de código que você mencionou, Admin.prototype = Object.create(User.prototype);, é responsável por definir o objeto protótipo de Admin como um objeto que herda do protótipo de User. Quando você utiliza o método Object.create(), você está criando um novo objeto que herda as propriedades e métodos de outro objeto. No caso do seu código, o protótipo de Admin está herdando do protótipo de User.

O método call() é utilizado para chamar uma função com um determinado valor de this. No seu código, você está chamando a função User dentro do contexto de Admin, para que as propriedades nome e email sejam definidas para Admin.

No entanto, o método call() não tem relação com a definição do protótipo de Admin. É por isso que, mesmo sem a linha Admin.prototype = Object.create(User.prototype);, o resultado da execução do programa é o mesmo.

Espero ter ajudado a esclarecer a sua dúvida! Qualquer outra pergunta, é só falar.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.