DOM hakkında birkaç açıklama


25

DOM’u anlamaya çalışıyorum ve ne olduğu konusunda adil bir fikrim olmasına rağmen, sadece tespit edemediğim bazı fikirler var. DOM’in ne olduğunu düşündüğümü ve sorularımın satır içi olacağını listeleyeceğim.

  1. DOM, web sayfasının tamamen nesne yönelimli bir temsilidir. W3C DOM standardı, çoğu modern tarayıcıda uygulanan DOM'un temelini oluşturur.

    Peki, bir XML / HTML belgesinin nesne modeli olarak nasıl temsil edildiğinden bahsetti mi?

  2. DOM, belgelerin bir ağaç veya koru olarak uygulanması gerektiğini belirtmez ve nesneler arasındaki ilişkilerin nasıl uygulanacağını da belirtmez.

    Belge başka hangi yollarla temsil edilebilir?

  3. Böyle bir şey yaptığında -

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

    Belge nesnesi DOM tarafından sağlanır. Yazma yöntemleri, DOM tarafından JavaScript’e maruz kalan arayüzlerdir.

    Yani, nesneler ve yöntemleri DOM ayrıştırıcısı tarafından JavaScript nesneleri olarak oluşturulur ve ardından JavaScript motoruna sunulur. Yoksa DOM ayrıştırma motorundaki nesneler ve yöntemler kendi ana dillerinde mi? Ve JavaScript motoruna açık mı? Öyleyse, JavaScript’ten ana dile çevirmek ne sorumludur?

  4. Dil bağları nelerdir?

    Dil bağlaması, DOM spesifikasyonundaki her bir arayüzü uygulayan, söz konusu dile özgü olan nesneler kümesidir.

    Geliştiriciler, DOM spesifikasyonundaki IDL'yi (Arabirim Tanım Dili) izleyerek DOM'dan kendi dillerine dil bağlantıları oluşturabilirler.

    Yani eğer DOM ayrıştırma motoru C ++ deyimiyle uygulanmışsa, bu IDL'yi izleyerek dil bağları oluşturduğunuzda, sadece belirli bir dilde nesneler yarattığınız anlamına gelir, yani DOM ayrıştırma motorunun inşa edildiği C ++?


@apsillers "DOM bir XML / HTML belgesinin nesne modeli olarak nasıl temsil edildiğinden bahsetti mi?" olmalıydı. Gönderiyi düzenledim.
user1720897

Yorumlarda elimden geleni cevaplayacağım. 3 & 4 tarayıcıları geliştiren birini gerçekten cevaplaması için alabilir ve cevap sayısını etkilemek istemiyorum. 1 - tarayıcı belgenin mevcut durumunu anlıyor, buna DOM adını verebilir, alternatif olarak DOM'a belgenin durumunu sorgulamanızı ve değiştirmenizi sağlayan standart arayüzleri çağırabilir.
George Mauer,

2 - İfade uygulama ile ilgilidir, temsili değil. Yanılmıyorsam, '' temsil '' bir ağaç olmak zorunda. Perde arkasında uygulama yapmaz.
George Mauer

Yanıtlar:


19

Aşağıdaki, ilgili şartname ve referansları en iyi okudum. (Mozilla’nın DOM düzeyleri hakkında özetlerini ve ilişkili linkleri özellikle faydalı buldum.) Başkalarının düzeltmelerini veya açıklamalarını teşvik ediyorum.

Peki, bir XML / HTML belgesinin nesne modeli olarak nasıl temsil edildiğinden bahsetti mi?

Evet. DOM Seviye 1 spesifikasyonunun iki bölümü vardır - Çekirdek ve HTML . Çekirdek DOM Spesifikasyon, bir tarif , genel bir yapısal belgeyi temsil etmek için kullanılabilir DOM. HTML DOM şartname açıklanır özellikle HTML belgeleri açıklamak için Çekirdek DOM nasıl kullanılacağı ve HTML özgü arabirimler içerir.

DOM, belgelerin bir ağaç veya koru olarak uygulanması gerektiğini belirtmez ve nesneler arasındaki ilişkilerin nasıl uygulanacağını da belirtmez. Belge başka hangi yollarla temsil edilebilir?

DOM Çekirdeği yok belge bir ağaç olduğunu varsayalım. NodeArayüz "entire [DOM] için ... birincil veri türü. Bu tek bir düğüm temsil olduğunu belge ağacının ." Nodeerişen çocukların, kardeş ve üst düğümlerine (örn için çeşitli özelliklere sahip parentNode, frstChildbir ağaç yapısını da anlaşılacağı gibi). Düz bir ağaç veya doğrusal bir ağaç kullanabilirsiniz (örneğin, bağlı bir liste), ancak yine de bir tür ağaç olacak.

George Mauer yorumlarda da belirtildiği gibi, belki belirli bir uygulamanın altında yatan modelin bir ağaç olması gerekmediğini kastediyorsunuz . Bu kadarı doğru; Uygulamanız DOM spesifikasyonunda vaat edilen işlevselliği sağladığı sürece, bu işlevselliği sağlamak için istediğiniz yapıyı kullanabilirsiniz.

DOM ayrıştırma altyapısındaki nesneler ve yöntemler kendi ana dillerinde mi?

Genellikle evet . Çoğu tarayıcıda, DOM, C gibi daha düşük bir dilde uygulanır ve tarayıcı, gerçek sunumları değiştirebilecek olan JavaScript ortamına bağlantılar sağlar. Aslında, “DOM’u Javascript’e taşıma” sorusuna bakarsanız ? Google bir yerli JavaScript DOM uygulamasına geçiş ilgilenen olduğunu göreceksiniz (muhtemelen her ikisi de bir C ++ işlevi ihtiyacı önlemek ve bu C ++ işlevi için yinelenen bir JavaScript sarıcı; muhtemelen de performans artışı için).

JavaScript’ten ana diline çeviri yapmaktan ne sorumludur?

Bu konuda biraz endişeliyim, ancak benim anladığım kadarıyla bir JavaScript DOM bağlaması çağrıldığında, JavaScript yürütme ortamının (kendisi C gibi daha düşük bir dilde uygulanmaktadır) ilgili DOM işlevine çağrı yapmasıdır. DOM'yi değiştirmek için (C / C ++ ile yazılmış).

Bundan daha derine gitmek istiyorsanız, aslında tarayıcı yapan biriyle konuşmanız gerekir.

bu, IDL'yi izleyerek dil bağlantıları oluşturduğunuzda, yalnızca belirli bir dilde nesneler oluşturduğunuz, yani DOM ayrıştırma motorunuzun oluşturduğu C ++ anlamına mı geliyor?

Evet. DOM'in IDL'si dille agnostiktir, böylece onu herhangi bir dilde uygulayabilirsiniz. "Bir DOM uygulaması yazmak", DOM spesifikasyonlarında açıklanan IDL arayüzlerine uymak için (belirli bir dilde) kod yazma anlamına gelir.


Ciltlemenin iki şeyi içermesi gerektiğine inanıyorum. Yerel çalışma zamanını referanslar ve yerel uygulamadan olayları toplamanın bir yolu ile çağırmak. Aslında, hangi yöntemlerin tarayıcılarda genellikle yerel kod sarmalayıcılar olduğunu görebiliyorsunuz. örneğin console.log(document.write);veya console.log(document.constructor);- .toString()log işlevini size işlev metnini vermeyen tarayıcılara ekleyin . Nesnelerin yerel kodda yansıtılmış bir eşdeğeri olması gerekmez. Ayrıca, çoğu DOM nesnesi özelliği aslında ilişkili davranışa sahip alıcılardır.
Erik Reppen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.