Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida

Não consegui entender a função de object.create.

const lotr = {
    nome: "Gandalf",
    classe: "mago",
    nivel: "20"
   }
   
   const lotr2 = Object.create(lotr)
  
  //quando chamo o objeto como um todo, o novo objeto retorna vazio
                                           retorno console
   console.log(lotr)  //{nome: 'Gandalf', classe: 'mago', nivel: '20'}
   console.log(lotr2) //{}

  // Se eu chamo uma chave específica, ele me retorna o valor
   console.log(lotr2.nome)  // Gandalf
   console.log(lotr2.classe)  // mago
   
   //Quando eu altero o nome
   lotr2.nome = "Gandalf, o Cinzento"
   console.log(lotr2.nome) // ele retorna com o novo nome
   console.log(lotr2) // ele me retorna dessa vez apenas com o novo nome, mas ainda sem as demais chaves.

A minha dúvida é, por que fazer esta "cópia" se ele não retorna as chaves/valores dentro do objeto, ou se retorna, por que não conseguimos consultar eles?

Se eu tiver que dar vários comandos p/ alterar os valores, não valeria a pena criar um novo objeto direto?

1 resposta
solução!

Olá, Bruno! Entendo que a função Object.create() possa parecer um pouco confusa no início. Vamos tentar esclarecer isso juntos.

O método Object.create() é usado para criar um novo objeto, mas, diferentemente de uma simples atribuição, ele não faz uma cópia exata do objeto original. Em vez disso, ele cria um novo objeto com o objeto original como seu protótipo.

No JavaScript, um objeto pode herdar propriedades de outro através de um mecanismo chamado protótipo. Quando você tenta acessar uma propriedade que não existe no objeto atual, o JavaScript irá procurá-la no objeto protótipo. Se ainda assim não encontrar, ele irá procurar no protótipo do protótipo, e assim por diante, até chegar ao final da cadeia de protótipos.

No seu exemplo, quando você faz const lotr2 = Object.create(lotr), você está criando um novo objeto lotr2 que tem lotr como seu protótipo. Isso significa que lotr2 não tem suas próprias propriedades (por isso aparece vazio quando você faz console.log(lotr2)), mas pode acessar as propriedades de lotr.

Quando você faz lotr2.nome = "Gandalf, o Cinzento", você está adicionando uma nova propriedade nome a lotr2. Agora, quando você faz console.log(lotr2.nome), o JavaScript encontra a propriedade nome em lotr2 e não precisa procurar no protótipo.

Quanto à sua pergunta sobre se vale a pena ou não usar Object.create(), depende muito do contexto. Se você quiser criar um novo objeto que compartilha algumas propriedades com um objeto existente, mas que possa ser modificado sem alterar o objeto original, Object.create() pode ser uma boa opção. No entanto, se você quiser fazer uma cópia exata de um objeto, existem outras maneiras de fazer isso, como usando o operador de propagação (...).

Espero ter ajudado e bons estudos!