Я пытался понять DOM, и хотя у меня есть четкое представление о том, что это такое, есть определенные идеи, которые я просто не могу определить. Я перечислю то, что я думаю о DOM, и мои вопросы будут встроены.
DOM - это полностью объектно-ориентированное представление веб-страницы. Стандарт W3C DOM лежит в основе DOM, реализованной в большинстве современных браузеров.
Так говорит ли DOM о том, как документ XML / HTML представляется в виде объектной модели?
В DOM не указывается, что документы должны быть реализованы в виде дерева или рощи, и при этом не указывается, как должны реализовываться взаимосвязи между объектами.
Какими еще способами может быть представлен документ?
Когда вы делаете что-то вроде этого -
document.write('welcome to my home page!');
объект документа предоставляется DOM. Методы записи - это интерфейсы, предоставляемые DOM для JavaScript.
Таким образом, объекты и его методы создаются как объекты JavaScript анализатором DOM, а затем представляются движку JavaScript? Или объекты и методы в механизме синтаксического анализа DOM на своем родном языке? И подвергается ли движок JavaScript? Если это так, то что отвечает за перевод с JavaScript на родной язык?
Какие языковые привязки?
Привязка языка - это набор объектов, родных для рассматриваемого языка, который реализует каждый из интерфейсов в спецификации DOM.
Разработчики могут создавать привязки языка из DOM к своему языку, просто следуя IDL (Язык определения интерфейса) в спецификации DOM.
Таким образом, если механизм синтаксического анализа DOM реализован, скажем, на C ++, означает ли это, что когда вы создаете языковые привязки, следуя IDL, вы просто создаете объекты на определенном языке, то есть C ++, на котором построен ваш механизм синтаксического анализа DOM?
источник
Ответы:
Далее следует мое лучшее прочтение соответствующих спецификаций и ссылок. (Я считаю, что тезисы Mozilla об уровнях DOM и связанных ссылках особенно полезны.) Я рекомендую исправления или разъяснения от других.
Да. Спецификация DOM Level 1 состоит из двух частей - Core и HTML . Основные спецификации DOM описывают общую модель DOM , которые могут быть использованы для представления любого структурированного документа. Спецификация HTML DOM описывает, как использовать Core DOM для конкретного описания документов HTML, и включает специфичные для HTML интерфейсы.
DOM Ядро делает предположить , что этот документ является деревом.
Node
Интерфейс является «... основным типом данных для всего [DOM]. Он представляет собой единый узел в дереве документа .»Node
имеет несколько свойств для доступа детей, брата или сестры, и родительских узлов (например,parentNode
,frstChild
и т.д.) , что подразумевает структуру дерева. Вы можете использовать плоское дерево или линейное дерево (например, связанный список), но все равно это будет некая форма дерева.Как отмечает Джордж Мауэр в комментариях, возможно, вы имеете в виду, что базовой моделью конкретной реализации не обязательно должно быть дерево. Это правда! до тех пор, пока ваша реализация обеспечивает функциональность, обещанную в спецификации DOM, вы можете использовать любую структуру, которая вам нравится, для обеспечения этой функциональности.
Вообще-то да . В большинстве браузеров DOM реализован на языке более низкого уровня, таком как C, и браузер предоставляет привязки к среде JavaScript, которые могут манипулировать фактическими представлениями. На самом деле, если вы посмотрите на вопрос «Перевод DOM в Javascript»? вы увидите, что Google заинтересован в переходе на собственную реализацию DOM JavaScript (вероятно, во избежание необходимости использовать и функцию C ++, и дублирующую оболочку JavaScript для этой функции C ++; возможно, также для повышения производительности).
Я немного опасен в этом вопросе, но, насколько я понимаю, когда вызывается привязка DOM JavaScript, среда выполнения JavaScript (которая сама реализуется на языке более низкого уровня, например C) делает вызов соответствующей функции DOM (написано на C / C ++) для управления DOM.
Если вы хотите пойти глубже, вам нужно поговорить с кем-то, кто на самом деле делает браузеры.
Да. IDL DOM не зависит от языка, поэтому вы можете реализовать его на любом языке. «Написание реализации DOM» означает написание кода (на определенном языке) для соответствия интерфейсам IDL, описанным в спецификациях DOM.
источник
console.log(document.write);
илиconsole.log(document.constructor);
- добавить.toString()
параметр журнала в браузеры, которые не дают вам текст функции. Объекты не обязательно имеют зеркальный эквивалент в нативном коде. Кроме того, большинство свойств объекта DOM на самом деле являются геттерами со связанным поведением.