Eu tenho tentado entender o DOM e, embora eu tenha uma boa idéia do que é, há certas idéias que simplesmente não consigo definir. Vou listar o que eu acho que é o DOM e minhas perguntas estarão em linha.
O DOM é uma representação totalmente orientada a objeto da página da web. O padrão DOM do W3C forma a base do DOM implementado na maioria dos navegadores modernos.
Então, o DOM fala sobre como um documento XML / HTML é representado como um modelo de objeto?
O DOM não especifica que os documentos devem ser implementados como uma árvore ou bosque, nem especifica como os relacionamentos entre objetos são implementados.
De que outras maneiras o documento pode ser representado?
Quando você faz algo assim -
document.write('welcome to my home page!');
o objeto de documento é fornecido pelo DOM. Os métodos de gravação são as interfaces expostas ao JavaScript pelo DOM.
Portanto, os objetos e seus métodos são criados como objetos JavaScript pelo analisador DOM e apresentados ao mecanismo JavaScript? Ou os objetos e métodos no mecanismo de análise do DOM estão em seu próprio idioma nativo? E está exposto ao mecanismo JavaScript? Se é assim, então o que é responsável pela tradução do JavaScript para o idioma nativo?
O que são ligações de idiomas?
A ligação de idioma é o conjunto de objetos nativos para o idioma em questão que implementa cada uma das interfaces na especificação DOM.
Os desenvolvedores podem criar ligações de idioma do DOM para o idioma deles simplesmente seguindo o IDL (Interface Definition Language) na especificação do DOM.
Portanto, se o mecanismo de análise do DOM for implementado como, por exemplo, C ++, isso significa que, quando você cria ligações de idiomas seguindo o IDL, está apenas criando objetos na linguagem específica, ou seja, C ++ com o qual o seu mecanismo de análise do DOM é construído?
fonte
Respostas:
A seguir, é minha melhor leitura das especificações e referências relevantes. (Achei os resumos da Mozilla sobre os níveis DOM e os links associados especialmente úteis.) Encorajo correções ou esclarecimentos de outras pessoas.
Sim. Existem duas partes na especificação do nível 1 do DOM - Core e HTML . A especificação Core DOM descreve um DOM geral que pode ser usado para representar qualquer documento estruturado. A especificação HTML DOM descreve como usar o DOM principal para descrever documentos HTML especificamente e inclui interfaces específicas para HTML.
DOM Núcleo faz supor que o documento é uma árvore. A
Node
interface é o "... tipo de dados primário para todo o [DOM]. Representa um único nó na árvore de documentos ".Node
tem várias propriedades para crianças acessam, irmão, e nós pai (por exemplo,parentNode
,frstChild
, etc.) que implica uma estrutura de árvore. Você pode usar uma árvore plana ou linear (por exemplo, uma lista vinculada), mas ainda será uma forma de árvore.Como George Mauer aponta nos comentários, talvez você queira dizer que o modelo subjacente de uma implementação específica não precisa ser uma árvore. Isso é verdade; contanto que sua implementação forneça a funcionalidade prometida na especificação do DOM, você poderá usar qualquer estrutura que desejar para fornecer essa funcionalidade.
Geralmente sim . Na maioria dos navegadores, o DOM é implementado em uma linguagem de nível inferior, como C, e o navegador fornece ligações ao ambiente JavaScript que pode manipular as representações reais. De fato, se você olhar para a pergunta Significado de "Movendo DOM para Javascript"? , você verá que o Google está interessado em mudar para uma implementação DOM JavaScript nativa (provavelmente evitará a necessidade de uma função C ++ e de um wrapper JavaScript duplicado para essa função C ++; possivelmente também de ganhos de desempenho).
Estou um pouco mais preocupado com esse assunto, mas meu entendimento é que, quando uma ligação JavaScript DOM é invocada, o ambiente de execução JavaScript (que é implementado em uma linguagem de nível inferior como C) faz uma chamada para a função DOM relevante (escrito em C / C ++) para manipular o DOM.
Se você quiser ir mais fundo do que isso, precisará conversar com alguém que realmente faz navegadores.
Sim. O IDL do DOM é independente de idioma, para que você possa implementá-lo em qualquer idioma. "Gravando uma implementação DOM" significa escrever código (em um idioma específico) para estar em conformidade com as interfaces IDL descritas nas especificações DOM.
fonte
console.log(document.write);
ouconsole.log(document.constructor);
- adicione.toString()
o parâmetro de log nos navegadores que não fornecem o texto da função. Objetos não necessariamente teriam um equivalente espelhado no código nativo. Além disso, a maioria das propriedades de objetos DOM são na verdade getters com comportamento associado.