Где в DOM-иерархии "document"?
Объектом какого класса является document
?
Какое место он занимает в DOM-иерархии?
Наследует ли он от Node
или от Element
, или может от HTMLElement
?
Объектом какого класса является document
, можно выяснить так:
alert(document); // [object HTMLDocument]
Или так:
alert(document.constructor.name); // HTMLDocument
Итак, document
– объект класса HTMLDocument
.
Какое место HTMLDocument занимает в иерархии?
Можно поискать в документации. Но попробуем выяснить это самостоятельно.
Пройдём по цепочке прототипов по ссылке__proto__
.
Как мы знаем, методы класса находятся в prototype
конструктора. Например, в HTMLDocument.prototype
находятся методы для объектов типа document.
Также внутри prototype
есть ссылка на функцию-конструктор:
alert(HTMLDocument.prototype.constructor === HTMLDocument); // true
Чтобы получить имя класса в строковой форме, используем constructor.name
. Сделаем это для всей цепочки прототипов document
вверх до класса Node
:
alert(HTMLDocument.prototype.constructor.name); // HTMLDocument
alert(HTMLDocument.prototype.__proto__.constructor.name); // Document
alert(HTMLDocument.prototype.__proto__.__proto__.constructor.name); // Node
Вот и иерархия.
Мы также можем исследовать объект с помощью console.dir(document)
и увидеть имена функций-конструкторов, открыв __proto__
. Браузерная консоль берёт их как раз из свойства constructor
.