Próbowałem zrozumieć DOM i chociaż mam dobre wyobrażenie o tym, co to jest, są pewne pomysły, których po prostu nie potrafię określić. Spiszę, co myślę, że DOM jest, i moje pytania będą w linii.
DOM jest w pełni obiektową reprezentacją strony internetowej. Standard DOM W3C stanowi podstawę modelu DOM zaimplementowanego w większości nowoczesnych przeglądarek.
Czy więc DOM mówi o tym, jak dokument XML / HTML jest reprezentowany jako model obiektowy?
DOM nie określa, że dokumenty muszą zostać zaimplementowane jako drzewo lub gaj, ani nie określa, w jaki sposób należy zaimplementować relacje między obiektami.
W jaki inny sposób można przedstawić dokument?
Kiedy robisz coś takiego -
document.write('welcome to my home page!');
obiekt dokumentu jest dostarczany przez DOM. Metody zapisu to interfejsy, które są narażone na JavaScript przez DOM.
Więc obiekty i metody są tworzone przez obiekt parsera jako obiekty JavaScript, a następnie przedstawiane silnikowi JavaScript? A może obiekty i metody w silniku analizującym DOM są w ich własnym języku ojczystym? I jest narażony na działanie silnika JavaScript? Jeśli tak, to co jest odpowiedzialne za tłumaczenie z JavaScript na język ojczysty?
Co to są powiązania językowe?
Powiązanie językowe to zestaw obiektów rodzimych dla danego języka, który implementuje każdy interfejs w specyfikacji DOM.
Programiści mogą tworzyć powiązania językowe z DOM do swojego języka, po prostu postępując zgodnie z IDL (Interface Definition Language) w specyfikacji DOM.
Więc jeśli silnik analizujący DOM jest zaimplementowany w powiedzmy C ++, czy to oznacza, że kiedy tworzysz powiązania językowe, postępując zgodnie z IDL, po prostu tworzysz obiekty w określonym języku, tj. C ++, z którym zbudowany jest twój silnik analizujący DOM?
źródło
Odpowiedzi:
Poniżej znajduje się moja najlepsza lektura odpowiednich specyfikacji i odniesień. (Uważam, że streszczenia Mozilli na temat poziomów DOM i powiązane linki są szczególnie pomocne.) Zachęcam do poprawiania lub wyjaśniania przez innych.
Tak. Specyfikacja DOM Level 1 składa się z dwóch części - Core i HTML . Rdzeń specyfikacji DOM opisuje ogólną DOM, które mogłyby zostać wykorzystane do reprezentowania dowolnego dokumentu strukturyzowanych. Specyfikacja HTML DOM opisuje, jak używać Core DOM do specyficznego opisywania dokumentów HTML i zawiera interfejsy specyficzne dla HTML.
DOM Rdzeń ma założyć, że dokument jest drzewem.
Node
Interfejs jest „... podstawowym typem danych dla całego [DOM]. Reprezentuje pojedynczy węzeł w drzewie dokumentu .”Node
ma kilka właściwości dostępu do dzieci, rodzeństwo i węzłów nadrzędnych (npparentNode
,frstChild
itp), które implikuje strukturę drzewa. Możesz użyć drzewa płaskiego lub liniowego (np. Połączonej listy), ale nadal będzie to jakaś forma drzewa.Jak zauważył George Mauer w komentarzach, być może masz na myśli, że podstawowym modelem konkretnej implementacji nie musi być drzewo. Tyle jest prawdą; tak długo, jak twoja implementacja zapewnia funkcjonalność obiecaną w specyfikacji DOM, możesz używać dowolnej struktury, którą chcesz zapewnić.
Ogólnie tak . W większości przeglądarek DOM jest implementowany w języku niższego poziomu, takim jak C, a przeglądarka dostarcza powiązania ze środowiskiem JavaScript, które mogą manipulować rzeczywistymi reprezentacjami. W rzeczywistości, jeśli spojrzysz na pytanie Znaczenie „Przenoszenie DOM do Javascript”? , zobaczysz, że Google jest zainteresowany przejściem na natywną implementację DOM JavaScript JavaScript (prawdopodobnie uniknie to zarówno funkcji C ++, jak i duplikatu opakowania JavaScript dla tej funkcji C ++; być może również w celu zwiększenia wydajności).
Jestem trochę bardziej ryzykowny w tym temacie, ale rozumiem, że gdy wywoływane jest powiązanie DOM JavaScript, środowisko wykonawcze JavaScript (które jest zaimplementowane w języku niższego poziomu, takim jak C), wywołuje odpowiednią funkcję DOM (napisany w C / C ++) do manipulowania DOM.
Jeśli chcesz zejść głębiej, musisz porozmawiać z kimś, kto faktycznie tworzy przeglądarki.
Tak. IDL DOM jest niezależny od języka, dzięki czemu można go wdrożyć w dowolnym języku. „Pisanie implementacji DOM” oznacza pisanie kodu (w określonym języku) w celu dostosowania do interfejsów IDL opisanych w specyfikacjach DOM.
źródło
console.log(document.write);
lubconsole.log(document.constructor);
- dodaj.toString()
parametr dziennika w przeglądarkach, które nie wyświetlają tekstu funkcji. Obiekty niekoniecznie miałyby dublowany odpowiednik w natywnym kodzie. Ponadto większość właściwości obiektów DOM to tak naprawdę gettery z powiązanym zachowaniem.