Où est le "document" dans la hiérarchie ?
À quelle classe appartient le document
?
Quelle est sa place dans la hiérarchie DOM ?
Hérite-t-il de Node
ou Element
, ou peut-être de HTMLElement
?
Nous pouvons voir à quelle classe il appartient en le sortant, comme :
alert(document); // [object HTMLDocument]
Ou :
alert(document.constructor.name); // HTMLDocument
Ainsi, document
est une instance de la classe HTMLDocument
.
Quelle est sa place dans la hiérarchie ?
Oui, nous pourrions parcourir les spécifications, mais il serait plus rapide de le déterminer manuellement.
Parcourons la chaîne du prototype via __proto__
.
Comme nous le savons, les méthodes d’une classe sont dans le prototype
du constructeur. Par exemple, HTMLDocument.prototype
a des méthodes pour les documents.
De plus, il y a une référence à la fonction constructeur à l’intérieur du prototype
:
alert(HTMLDocument.prototype.constructor === HTMLDocument); // true
Pour obtenir le nom de la classe sous forme de chaîne de caractères, nous pouvons utiliser constructor.name
. Faisons-le pour toute la chaîne du prototype de document
, jusqu’à la classe Node
:
alert(HTMLDocument.prototype.constructor.name); // HTMLDocument
alert(HTMLDocument.prototype.__proto__.constructor.name); // Document
alert(HTMLDocument.prototype.__proto__.__proto__.constructor.name); // Node
Voilà la hiérarchie.
Nous pourrions également examiner l’objet en utilisant console.dir(document)
et voir ces noms en ouvrant __proto__
. La console les prend du constructeur en interne.