Кілька роз'яснень щодо 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.