Где в 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.