Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Para saber mais: objeto literal e referência

No material extra tem um caso de uso de Object.create() que me deixou na dúvida.

"O método Object.create() cria um novo objeto utilizando como protótipo o objeto passado via parâmetro."

Refazendo o exemplo o console.log me retornou o segundo objeto contendo apenas a propriedade nome (que inseri posteriormente para mudar, tentando sem a linha para renomear ele me retornou um objeto vazio).

Queria saber se esse é o comportamento esperado (e se é, qual é a serventia prática) ou se fiz algo errado, pois imaginei que o trecho const depoisDeMoria = Object.create(antesDeMoria); fosse clonar o primeiro objeto para podermos trabalhar separadamente depois.

Muito obrigado de antemão.

Segue o código:

const antesDeMoria = {
    nome: 'Gandalf, o Cinzento',
    classe: 'mago',
    nivel: "20"
};

const depoisDeMoria = Object.create(antesDeMoria);

depoisDeMoria.nome = 'Gandalf, o Branco';

console.log(antesDeMoria); //~{ nome: 'Gandalf, o Cinzento', classe: 'mago', nivel: '20' }
console.log(depoisDeMoria); //~{ nome: 'Gandalf, o Branco' }
2 respostas
solução!

Thiago, boa noite!

Pelo que eu entendi, Object.create() é utilizado para reaproveitar as prototypes de outro objeto.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

Caso tenha necessidade de clonar o objeto, basta espalha-lo em novas chaves:

    const oldObj = { name: 'Gabriel' };
    let newObj = { ...oldObj, age: 21 }

Ou utilizando o Object.create(), o primeiro parâmetro pode ser um objeto vazio, e o segundo contendo o valor do objeto da forma abaixo:

const antesDeMoria = {
    nome: {
        value: 'Gandalf, o Cinzento', 
    },
    classe:  {
        value: 'Mago', 
    },
    nivel: {
        value: '20', 
    },
};

const depoisDeMoria = Object.create({}, antesDeMoria);

depoisDeMoria.nome = 'Gandalf, o Branco';

console.log(antesDeMoria); //~{ nome: 'Gandalf, o Cinzento', classe: 'mago', nivel: '20' }
console.log(depoisDeMoria); //~{ nome: 'Gandalf, o Branco', classe: 'mago', nivel: '20' }

espero ter ajudado

Show! Muito obrigado, amigo!