Ich habe versucht, das DOM zu verstehen, und obwohl ich eine gute Vorstellung davon habe, was es ist, gibt es bestimmte Ideen, die ich einfach nicht festhalten kann. Ich werde auflisten, was ich denke, das DOM ist und meine Fragen werden inline sein.
Das DOM ist eine vollständig objektorientierte Darstellung der Webseite. Der W3C-DOM-Standard bildet die Grundlage für das in den meisten modernen Browsern implementierte DOM.
Spricht das DOM also darüber, wie ein XML / HTML-Dokument als Objektmodell dargestellt wird?
Das DOM gibt weder an, dass Dokumente als Baum oder Wald implementiert werden müssen, noch gibt es an, wie die Beziehungen zwischen Objekten implementiert werden sollen.
Auf welche andere Weise kann das Dokument dargestellt werden?
Wenn Sie so etwas tun -
document.write('welcome to my home page!');
Das Dokumentobjekt wird vom DOM bereitgestellt. Die Schreibmethoden sind die Schnittstellen, die vom DOM für JavaScript verfügbar gemacht werden.
Also werden die Objekte und ihre Methoden vom DOM-Parser als JavaScript-Objekte erstellt und dann der JavaScript-Engine präsentiert? Oder sind die Objekte und Methoden in der DOM-Parsing-Engine in ihrer eigenen Muttersprache? Und ist die JavaScript-Engine ausgesetzt? Wenn ja, was ist dann für die Übersetzung von JavaScript in die Muttersprache verantwortlich?
Was sind Sprachbindungen?
Die Sprachbindung ist die Menge der Objekte, die für die betreffende Sprache typisch sind und die die einzelnen Schnittstellen in der DOM-Spezifikation implementieren.
Entwickler können Sprachbindungen vom DOM zu ihrer Sprache erstellen, indem sie einfach der IDL (Interface Definition Language) in der DOM-Spezifikation folgen.
Wenn die DOM-Parsing-Engine also in C ++ implementiert ist, bedeutet dies, dass Sie beim Erstellen von Sprachbindungen anhand der IDL nur Objekte in der spezifischen Sprache erstellen, dh in C ++, mit der Ihre DOM-Parsing-Engine erstellt wurde?
quelle
Antworten:
Was folgt, ist meine beste Lektüre der relevanten Spezifikationen und Referenzen. (Ich fand Mozillas Abstracts zu DOM-Levels und den dazugehörigen Links besonders hilfreich.) Ich ermutige andere zu Korrekturen oder Klarstellungen.
Ja. Die DOM Level 1-Spezifikation besteht aus zwei Teilen: Core und HTML . Die Core- DOM-Spezifikation beschreibt ein allgemeines DOM, mit dem jedes strukturierte Dokument dargestellt werden kann. Die HTML- DOM-Spezifikation beschreibt die Verwendung des Core-DOM zur spezifischen Beschreibung von HTML-Dokumenten und enthält HTML-spezifische Schnittstellen.
DOM Core geht davon aus, dass das Dokument ein Baum ist. Die
Node
Schnittstelle ist der "... primäre Datentyp für das gesamte [DOM]. Sie repräsentiert einen einzelnen Knoten in der Dokumentstruktur ."Node
hat mehrere Eigenschaften für den Zugriff auf Kinder, Geschwister und Eltern - Knoten (zBparentNode
,frstChild
usw.) , die eine Baumstruktur impliziert. Sie könnten einen flachen Baum oder einen linearen Baum (z. B. eine verknüpfte Liste) verwenden, aber es wird immer noch eine Form von Baum sein.Wie George Mauer in den Kommentaren ausführt, meinen Sie vielleicht, dass das zugrunde liegende Modell einer bestimmten Implementierung kein Baum sein muss. So viel ist wahr; Solange Ihre Implementierung die in der DOM-Spezifikation versprochene Funktionalität bietet, können Sie eine beliebige Struktur verwenden, um diese Funktionalität bereitzustellen.
Im Allgemeinen ja . In den meisten Browsern ist das DOM in einer niedrigeren Sprache wie C implementiert, und der Browser stellt der JavaScript-Umgebung Bindungen zur Verfügung, mit denen die tatsächlichen Darstellungen bearbeitet werden können. In der Tat, wenn Sie sich die Frage ansehen, Bedeutung von "Verschieben von DOM in Javascript"? Sie werden sehen , dass Google bei der Umstellung auf eine native JavaScript DOM - Implementierung (wahrscheinlich sowohl ein C ++ Funktion zu vermeiden , benötigt interessiert ist , und ein Duplikat JavaScript - Wrapper für die C ++ Funktion, möglicherweise auch für Performance - Gewinne).
Bei diesem Thema bin ich etwas unsicherer, aber ich verstehe, dass die JavaScript-Ausführungsumgebung (die selbst in einer niedrigeren Sprache wie C implementiert ist) beim Aufrufen einer JavaScript-DOM-Bindung die entsprechende DOM-Funktion aufruft (in C / C ++ geschrieben), um das DOM zu manipulieren.
Wenn Sie tiefer gehen möchten, müssen Sie mit jemandem sprechen, der tatsächlich Browser herstellt.
Ja. Die IDL des DOM ist sprachunabhängig, sodass Sie sie in jeder Sprache implementieren können. "Schreiben einer DOM-Implementierung" bedeutet das Schreiben von Code (in einer bestimmten Sprache), um den in den DOM-Spezifikationen beschriebenen IDL-Schnittstellen zu entsprechen.
quelle
console.log(document.write);
oderconsole.log(document.constructor);
-.toString()
Fügen Sie den Protokollparameter in Browsern hinzu, in denen der Funktionstext nicht angezeigt wird. Objekte müssten nicht unbedingt eine gespiegelte Entsprechung im systemeigenen Code haben. Außerdem sind die meisten DOM-Objekteigenschaften Getter mit dem zugehörigen Verhalten.