Де "document" в ієрархії?
До якого класу належить document
?
Де його місце в ієрархії DOM?
Він успадковує від Node
чи Element
, або, можливо, HTMLElement
?
Ми можемо побачити, якому класу він належить вивівши його, наприклад:
alert(document); // [object HTMLDocument]
Або:
alert(document.constructor.name); // HTMLDocument
Отже, document
– це екземпляр класу HTMLDocument
.
Яке його місце в ієрархії?
Так, ми могли б переглянути специфікацію, але було б швидше з’ясувати вручну.
Давайте пройдемо по ланцюгу прототипів через __proto__
.
Як відомо, методи класу знаходяться в prototype
конструктора. Наприклад, HTMLDocument.prototype
має методи документів.
Також є посилання на функцію конструктора всередині 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
.