2015-04-19 14 views
7

Oggi stavo giocando quando ho notato che alcuni dei miei oggetti nella console di Chrome venivano visualizzati come Object invece del nome della funzione di costruzione.Object.create altera l'output della console dell'oggetto proto in Chrome?

Questo era strano, così ho bollito giù al seguente codice:

function Baz() { 
    this.baz = true; 
} 
var b = new Baz(); 
var c = Object.create(b); 
console.log(b); // why is b outputting with Object not Baz? 

Nel codice precedente b, non viene creato tramite un Object.create eppure quando registrato dice oggetto. Non ho errori di battitura lì, e per sbaglio chiedevo di c. Il registro di b è stato modificato quando non ho nemmeno toccato quell'oggetto. La creazione di un'altra istanza c non dovrebbe alterare b.

Questo deve essere un bug di Chrome, giusto? Esiste comunque la possibilità per Google di segnalare correttamente lo Baz qui?

Questo è importante ai fini del debug.

enter image description here

UPDATE Bug archiviato: https://code.google.com/p/chromium/issues/detail?id=478522

+0

chrome è giusto che hai torto – webduvet

+0

@webduvet: come? –

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create – webduvet

risposta

5

Aggiornamento: Questa è davvero una regressione tra Chrome 41 e Chrome 42. E 'monitorato qui: http://crbug.com/478522

Chrome 41 di uscita: enter image description here

Uscita Chrome 42:

Hanno fatto miglioramenti per l'evidenziazione della sintassi durante la digitazione negli strumenti dev e questo probabilmente si è rotto. Ho inviato un messaggio a un amico che è profondamente coinvolto con gli strumenti di sviluppo. Bella scoperta.


No. Il problema che descrivi è molto reale.

Gli oggetti creati con i costruttori avranno il loro nome visualizzato durante la registrazione e in generale una migliore esperienza di debug in Chrome (e in node/io.js).

Per questo motivo, evito il Object.create per l'eredità prototipica nel mio codice, anche se lo preferisco concettualmente.

Penso che tu capisca questo - ma voglio ancora chiarire per i futuri lettori. Si noti che l'ereditarietà si verifica ancora con la versione Object.create - l'unica differenza è in come l'oggetto è registrato e trattato nel debugger .

+0

Ciò che è strano è che non sto parlando del nuovo oggetto. La variabile b nel mio esempio è stata creata esclusivamente tramite una funzione di costruzione. Non vedo perché la creazione di un altro oggetto modifica le uscite di Chrome. – pbo

+0

@pbo 'console.log (b)' registra 'Baz {baz: true}', e 'console.log (c)' registra 'Object {baz: true}' (sebbene sia _ un_Baz, perché è stato creato con Object.create e non con un costruttore –

+0

@BenjaminGruenbaum No, entrambi contengono 'Object {baz: true}'. – Siguza

Problemi correlati