um novo objecto criado a partir de um objecto completamente personalizado (especialmente um criado a partir do id
objecto, que é basicamente um objecto personalizado sem Membros) pode comportar-se de formas inesperadas. Isto é especialmente verdadeiro quando a depuração, uma vez que funções comuns de conversão/detecção de propriedades de objetos podem gerar erros, ou perder informações (especialmente se usando Silent error-traps que ignoram erros). Por exemplo, aqui estão dois objetos:
Como mostrado acima, tudo parece normal até agora., No entanto, quando tentar utilizar estes objetos, suas diferenças rapidamente tornar-se evidente:
> "oco is: " + oco // shows "oco is: "> "ocn is: " + ocn // throws error: Cannot convert object to primitive value
Teste apenas alguns dos muitos mais básicas funções internas mostra a magnitude do problema mais claramente:
Como disse, essas diferenças podem tornar a depuração mesmo simples-parecendo problemas rapidamente desviaram. Por exemplo:
uma simples função de depuração comum:
Não tais resultados simples: (especialmente se Silent error-trapping tinha escondido as mensagens de erro)
(mas se o mesmo objeto é criado em uma ordem diferente — pelo menos em algumas implementações.,..)
Note Que tal ordem diferente pode surgir estaticamente através de codificações fixas díspares como aqui, mas também dinamicamente através de qualquer ordem que tais ramificações de código de adição de propriedades realmente sejam executadas em tempo de execução como depende de Entradas e/ou variáveis aleatórias. Por outro lado, a actual ordem de iteração não está garantida, independentemente do que os membros da ordem sejam adicionados.
esteja ciente, também, de que usando objeto.entradas() em um objeto criado através de objeto.o create () irá resultar na devolução de um array vazio.,
var obj = Object.create({ a: 1, b: 2 });> console.log(Object.entries(obj)); // shows ""
algumas Não-soluções
uma boa solução para os métodos-objeto em falta não é imediatamente aparente.,
Adicionando o objeto ausente-método diretamente de norma-objeto NÃO funciona:
Adicionando o objeto ausente-método diretamente ao novo objeto de “protótipo” não funciona, pois o novo objeto não tem um real de um protótipo (o que é realmente a causa de TODOS estes problemas) e não pode ser adicionado diretamente:
Adicionando o objeto ausente-método utilizando o padrão-objeto como novo protótipo do objeto não funciona:
Alguns OK soluções
Novamente, acrescentando que a falta de objeto-método diretamente de norma-objeto NÃO funciona., No entanto, adicionando o método genérico diretamente, NÃO:
no Entanto, a definição genérica do protótipo como o novo protótipo do objeto funciona ainda melhor:
(além de todas as funções relacionadas com a cadeia mostrado acima, isso também adiciona:)
Como mostrado, objetos modificados desta forma, agora parecem muito com objetos comuns.