¿Dónde está el "document" en la jerarquía?
¿A qué clase pertenece el document
?
¿Cuál es su lugar en la jerarquía DOM?
¿Hereda de Node
o Element
, o tal vez HTMLElement
?
Podemos ver a qué clase pertenece, imprimiéndola, así:
alert(document); // [object HTMLDocument]
O:
alert(document.constructor.name); // HTMLDocument
Entonces, document
es una instancia de la clase HTMLDocument
.
¿Cuál es su lugar en la jerarquía?
Sí, podríamos examinar las especificaciones, pero sería más rápido averiguarlo manualmente.
Recorramos la cadena de prototype través de __proto__
.
Como sabemos, los métodos de una clase están en el prototype
del constructor. Por ejemplo, HTMLDocument.prototype
tiene métodos para documentos.
Además, hay una referencia a la función constructor dentro de prototype
:
alert(HTMLDocument.prototype.constructor === HTMLDocument); // true
Para obtener un nombre de la clase como string, podemos usar constructor.name
. Hagámoslo para toda la cadena prototype de document
, hasta la clase Node
:
alert(HTMLDocument.prototype.constructor.name); // HTMLDocument
alert(HTMLDocument.prototype.__proto__.constructor.name); // Document
alert(HTMLDocument.prototype.__proto__.__proto__.constructor.name); // Node
Esa es la jerarquía.
También podríamos examinar el objeto usando console.dir(document)
y ver estos nombres abriendo __proto__
. La consola los toma del constructor
internamente.