In che punto della gerarchia DOM si trova "document"?
A quale classe appartiene document
?
Qual è il suo posto nella gerarchia DOM?
Eredita da Node
, da Element
o forse da HTMLElement
?
Possiamo visualizzare a quale classe appartiene esaminandola in questo modo:
alert(document); // [object HTMLDocument]
Oppure:
alert(document.constructor.name); // HTMLDocument
Quindi document
è un’istanza della classe HTMLDocument
.
Qual è il suo posto nella gerarchia DOM?
Certo, potremmo sfogliare la specifica, ma sarebbe più veloce scoprirlo manualmente.
Attraversiamo la catena dei prototipi tramite __proto__
.
Come sappiamo i metodi di una classe sono nel prototype
del costruttore. Per esempio HTMLDocument.prototype
ha i metodi per i documenti.
C’è inoltre un riferimento al costruttore all’interno di prototype
:
alert(HTMLDocument.prototype.constructor === HTMLDocument); // true
Per ricavare la stringa con il nome della classe possiamo usare constructor.name
. Facciamolo per l’intera catena prototipale document
fino alla classeNode
:
alert(HTMLDocument.prototype.constructor.name); // HTMLDocument
alert(HTMLDocument.prototype.__proto__.constructor.name); // Document
alert(HTMLDocument.prototype.__proto__.__proto__.constructor.name); // Node
Questa è la gerachia.
Potremmo anche esaminare l’oggetto usando console.dir(document)
e visualizzare gli stessi nomi aprendo __proto__
. La console li ricava internamente da constructor
.