2014-11-23 12 views
5

Vorrei trovare il tipo di oggetto Javascipt (il nome della funzione di costruzione), ma continuo a recuperare un "oggetto" generico con tutti i metodi che ho provato. Ho cercato online e nessun metodo Javascript che ho trovato ha funzionato per me ancora. Restituisce sempre il tipo di costruttore oggetto come un "oggetto" generico. Eppure eccolo, fissandomi quando lo controllo nella console di Chrome. Qualche idea su come potrei ottenere quell'informazione in JS?Console di Chrome e tipo di oggetto Javascript

PS. Sto usando Browserify per separare il mio codice se questo fa la differenza.

enter image description here

La ragione per cui ho pensato che potrebbe essere causa di come Browserify carichi require codice è perché questo è l'output che ricevo da una funzione di costruzione Browserify caricato:

enter image description here

Ed ecco ciò che ottengo dalla creazione manuale di una funzione di costruzione:

enter image description here

Indipendentemente da ciò e indipendentemente da come creo la funzione di costruttore var Prey = function() {} rispetto a var Prey = function Prey() {}, gli strumenti di sviluppo di Chrome sembrano ancora sapere qual è il nome della funzione di costruzione anche quando JavaScript non sembra sapere. Forse è perché possono ispezionare il codice nella macchina virtuale in un modo in cui la lingua Javascript non ha accesso, ma mi chiedo se mi manca qualcosa. Qualcuno sa di un altro modo per determinare un tipo di istanza in Javascript?

+3

Si prega di mostrare come l'oggetto viene costruito. – thefourtheye

+0

Sembra che qualunque cosa abbia costruito 'obj' non ha impostato correttamente la proprietà' constructor'. –

+0

@thefourtheye ha aggiunto ulteriori informazioni sulle funzioni del costruttore. Spero che fornisca un contesto migliore. Grazie! – ootoovak

risposta

1

La preda che stai vedendo è la preda quando fai function Prey(){};, quindi, il nome della funzione è Prey. Se si definisce Prey come var Prey = function(){};, il nome della funzione è "";

Quindi, in pratica, se si desidera utilizzare il nome della funzione, è necessario fornire un nome al costruttore. var Prey = function Prey(){};

EDIT: o la sua possibile che hai fatto una variazione di questo:

var A = function NAMED(){}; 
var B = function(){}; 
B.prototype = Object.create(A.prototype); 
var o = new B(); 

> o 
< B {}; 

> o.constructor.name 
< "NAMED" 
+0

Questo spiega perché obj.constructor.name è "Oggetto"? – arcyqwerty

+0

Ma poi non verrebbe visualizzato come Prey ... Anche se si imposta manualmente il prototipo tramite 'obj .__ proto__ = Prey.prototype', verranno impostati sia il nome del costruttore che il display della console. – arcyqwerty

Problemi correlati