Un nuovo oggetto creato da un oggetto completamente personalizzato (in particolare uno creato dall’oggetto null
, che è fondamentalmente un oggetto personalizzato senza membri) può comportarsi in modi inaspettati. Ciò è particolarmente vero durante il debug, poiché le comuni funzioni di conversione/rilevamento di proprietà di oggetti possono generare errori o perdere informazioni (specialmente se si utilizzano trappole di errore silenziose che ignorano gli errori). Ad esempio, qui ci sono due oggetti:
Come mostrato sopra, tutto sembra normale finora., Tuttavia, quando si tenta di utilizzare effettivamente questi oggetti, le loro differenze diventano rapidamente evidenti:
> "oco is: " + oco // shows "oco is: "> "ocn is: " + ocn // throws error: Cannot convert object to primitive value
Testare solo alcune delle molte funzioni incorporate di base mostra l’entità del problema in modo più chiaro:
Come detto, queste differenze possono rendere il debug anche semplice-i problemi apparentemente vanno rapidamente fuori strada. Ad esempio:
Una semplice funzione di debug comune:
Non risultati così semplici: (specialmente se il silent error-trapping aveva nascosto i messaggi di errore)
(Ma se lo stesso oggetto viene creato in un ordine diverso-almeno in alcune implementazioni.,..)
Si noti che un ordine così diverso può sorgere staticamente tramite codifiche fisse disparate come qui, ma anche dinamicamente tramite qualunque ordine qualsiasi ramo di codice che aggiunge proprietà viene effettivamente eseguito in fase di esecuzione come dipende da input e / o variabili casuali. Inoltre, l’ordine di iterazione effettivo non è garantito indipendentemente dai membri dell’ordine aggiunti.
Essere consapevoli, inoltre, che l’utilizzo di Object.voci () su un oggetto creato tramite Oggetto.create () si tradurrà in un array vuoto restituito.,
var obj = Object.create({ a: 1, b: 2 });> console.log(Object.entries(obj)); // shows ""
Alcune NON soluzioni
Una buona soluzione per i metodi oggetto mancanti non è immediatamente evidente.,
Aggiungere l’oggetto mancante-metodo direttamente dalla standard-oggetto NON funziona:
Aggiungere l’oggetto mancante-metodo direttamente al nuovo oggetto “prototipo” non funziona più, dato che il nuovo oggetto non dispone di un vero e proprio prototipo (che in realtà è la causa di TUTTI questi problemi) e non può essere aggiunto direttamente:
Aggiungere l’oggetto mancante-metodo utilizzando standard-oggetto come nuovo oggetto prototipo non funziona:
Alcuni OK soluzioni
Ancora una volta, aggiungendo l’oggetto mancante-metodo direttamente dalla standard-oggetto NON funziona., Tuttavia, aggiungendo direttamente il metodo generico, FA:
Tuttavia, impostando il prototipo generico come prototipo del nuovo oggetto funziona ancora meglio:
(Oltre a tutte le funzioni relative alle stringhe mostrate sopra, questo aggiunge anche:)
Come mostrato, gli oggetti modificati in questo modo ora assomigliano molto agli oggetti ordinari.