Кілька роз'яснень щодо DOM


25

Я намагаюся зрозуміти DOM, і хоча у мене є чітке уявлення про те, що це таке, є певні ідеї, які я просто не можу чітко визначити. Я перерахую, що я думаю, що DOM є, і мої запитання будуть відповідні.

  1. DOM - це повністю об'єктно-орієнтоване представлення веб-сторінки. Стандарт W3C DOM є основою DOM, реалізованої в більшості сучасних браузерів.

    Так DOM говорить про те, як XML / HTML документ представлений як об'єктна модель?

  2. DOM не вказує, що документи повинні бути реалізовані у вигляді дерева або гаю, а також не визначає, як реалізуються відносини між об'єктами.

    Якими ще способами документ може бути представлений?

  3. Коли ви робите щось подібне -

    document.write('welcome to my home page!');

    об’єкт документа надається ДОМ. Методи запису - це інтерфейси, які DOM піддається JavaScript.

    Тож об'єкти та його методи створюються як об єкти JavaScript за допомогою аналізатора DOM і потім подаються в двигун JavaScript? Або об'єкти та методи в механізмі розбору DOM рідною мовою? І піддається дії двигуна JavaScript? Якщо це так, то що відповідає за переклад з JavaScript на рідну мову?

  4. Що таке мовні прив’язки?

    Прив'язка мови - це сукупність об'єктів, що належать до відповідної мови, що реалізує кожен із інтерфейсів у специфікації DOM.

    Розробники можуть створювати прив'язку мови від DOM до своєї мови, просто дотримуючись IDL (Мова визначення інтерфейсу) у специфікації DOM.

    Отже, якщо механізм розбору DOM реалізований у скажімо C ++, чи означає це, що коли ви створюєте прив'язки мови, слідуючи IDL, ви просто створюєте об'єкти певною мовою, тобто C ++, з якого побудований ваш механізм розбору DOM?


@apsillers Це повинно було бути "Так DOM говорить про те, як XML / HTML документ представлений як об'єктна модель?" Я відредагував пост.
— користувач1720897

Я відповім, що можу в коментарях. 3 та 4 може спричинити відповідь на когось, хто розробляє браузери, і я не хочу впливати на кількість відповідей. 1 - браузер має розуміння поточного стану документа, ви можете назвати це DOM, по черзі ви можете викликати DOM стандартними інтерфейсами, які він виставляє, що дозволяють запитувати та змінювати стан документа.
— Джордж Мауер

2 - Заява про реалізацію, а не представлення. Якщо я не помиляюся, '' представлення '' має бути деревом. Закулісна реалізація цього не робить.
— Джордж Мауер

Відповіді:


19

Далі я найкраще читаю відповідні технічні характеристики та посилання. (Я знайшов особливо корисними тези Mozilla про рівні DOM та пов’язані з ними посилання.) Я заохочую виправлення чи уточнення інших.

Так DOM говорить про те, як XML / HTML документ представлений як об'єктна модель?

Так. У специфікації DOM рівня 1 є дві частини - Core та HTML . Специфікація Core DOM описує загальний DOM, який може використовуватися для представлення будь-якого структурованого документа. HTML специфікація DOM описує як використовувати Core DOM для конкретного опису документів HTML, та включає специфічні для HTML інтерфейси.

DOM не вказує, що документи повинні бути реалізовані у вигляді дерева або гаю, а також не визначає, як реалізуються відносини між об'єктами. Якими ще способами документ може бути представлений?

DOM Ядро робить припустити , що цей документ є деревом. NodeІнтерфейс є «... основним типом даних для всього [DOM]. Він являє собою єдиний вузол в дереві документа .» Nodeмає кілька властивостей для доступу до дітей, братів та батьківських вузлів (наприклад,parentNode , frstChildі т.д.) , що має на увазі структуру дерева. Ви можете використовувати плоске дерево або лінійне дерево (наприклад, зв'язаний список), але це все ще буде деяка форма дерева.

Як в коментарях зазначає Джордж Мауер, можливо, ви маєте на увазі, що основна модель конкретної реалізації не потрібно бути деревом. Це багато правдивого; доки ваша реалізація забезпечує функціонал, обіцяний у специфікації DOM, ви можете використовувати будь-яку структуру, яку ви хочете, щоб надати цю функціональність.

Чи є об'єкти та методи в механізмі розбору DOM рідною мовою?

Взагалі, так . У більшості браузерів DOM реалізований мовою нижчого рівня, як C, і браузер постачає прив’язки до середовища JavaScript, які можуть маніпулювати фактичними уявленнями. Насправді, якщо ви подивитесь на питання про значення «Переміщення DOM у Javascript»? Ви побачите, що Google зацікавлений у переході на вбудовану реалізацію JavaScript DOM (ймовірно, щоб уникнути необхідності як функції C ++, так і дублікату обгортки JavaScript для цієї функції C ++; можливо, також для підвищення продуктивності).

що відповідає за переклад з JavaScript на рідну мову?

Я трохи туманніше з цього приводу, але я розумію, що коли викликається прив'язка JavaScript DOM JavaScript, середовище виконання JavaScript (яке реалізується на мові нижчого рівня, як C) робить виклик відповідної функції DOM (написано на C / C ++) для маніпулювання DOM.

Якщо ви хочете заглибитись далі, вам потрібно буде поговорити з тим, хто насправді робить браузери.

чи означає це, що коли ви створюєте прив'язки мови, слідуючи IDL, ви просто створюєте об'єкти певною мовою, тобто C ++, з якого побудований ваш механізм розбору DOM?

Так. IDL DOM є мовно-агностичним, так що ви можете реалізувати його на будь-якій мові. "Написання реалізації DOM" означає написання коду (певною мовою) відповідно до інтерфейсів IDL, описаних у специфікаціях DOM.


Я вважаю, що прив'язки повинні включати дві речі. Викликати початковий час роботи через посилання та певний спосіб підібрати події з нативного втілення. Насправді ви можете бачити, які методи - це лише натільні обгортки коду у веб-переглядачах, зазвичай, консольне ведення їх. наприклад, console.log(document.write);або console.log(document.constructor);- додайте .toString()параметр журналу в браузери, які не надають вам функції функції. Об'єкти не обов'язково матимуть дзеркальний еквівалент у рідному коді. Крім того, більшість властивостей об'єкта DOM насправді є дітьми з пов'язаною поведінкою.
— Ерік Реппен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.