He estado tratando de entender el DOM, y aunque tengo una idea clara de lo que es, hay ciertas ideas que simplemente no puedo precisar. Voy a enumerar lo que creo que es el DOM y mis preguntas estarán en línea.
El DOM es una representación totalmente orientada a objetos de la página web. El estándar W3C DOM forma la base del DOM implementado en la mayoría de los navegadores modernos.
Entonces, ¿habla el DOM sobre cómo un documento XML / HTML se representa como un modelo de objeto?
El DOM no especifica que los documentos deben implementarse como un árbol o una arboleda, ni especifica cómo se implementan las relaciones entre los objetos.
¿De qué otras formas se puede representar el documento?
Cuando haces algo como esto ...
document.write('welcome to my home page!');
El objeto del documento es proporcionado por el DOM. Los métodos de escritura son las interfaces que el DOM expone a JavaScript.
Entonces, ¿los objetos y sus métodos son creados como objetos JavaScript por el analizador DOM y luego presentados al motor JavaScript? ¿O los objetos y métodos dentro del motor de análisis DOM están en su propio idioma nativo? ¿Y está expuesto al motor de JavaScript? Si es así, ¿qué es responsable de traducir de JavaScript al idioma nativo?
¿Qué son los enlaces de idiomas?
El enlace de idioma es el conjunto de objetos nativos del idioma en cuestión que implementa cada una de las interfaces en la especificación DOM.
Los desarrolladores pueden crear enlaces de idiomas desde el DOM a su idioma simplemente siguiendo el IDL (lenguaje de definición de interfaz) en la especificación DOM.
Entonces, si el motor de análisis DOM se implementa en, por ejemplo, C ++, ¿eso significa que cuando crea enlaces de lenguaje siguiendo el IDL, solo está creando objetos en el lenguaje específico, es decir, C ++ con el que está construido su motor de análisis DOM?
fuente
Respuestas:
Lo que sigue es mi mejor lectura de las especificaciones y referencias relevantes. (Encontré los resúmenes de Mozilla sobre los niveles de DOM y los enlaces asociados especialmente útiles). Animo las correcciones o aclaraciones de otros.
Sí. La especificación DOM Nivel 1 tiene dos partes: Core y HTML . La especificación Core DOM describe un DOM general que podría usarse para representar cualquier documento estructurado. La especificación HTML DOM describe cómo usar Core DOM para describir documentos HTML específicamente e incluye interfaces específicas de HTML.
DOM Core no asuma que el documento es un árbol. La
Node
interfaz es el "... tipo de datos primario para todo el [DOM]. Representa un nodo único en el árbol de documentos ".Node
tiene varias propiedades para acceder a los nodos hijos, hermanos y padres (p. ejparentNode
.frstChild
, etc.) que implica una estructura de árbol. Podría usar un árbol plano o un árbol lineal (p. Ej., Una lista vinculada), pero seguirá siendo algún tipo de árbol.Como señala George Mauer en los comentarios, quizás quiera decir que el modelo subyacente de una implementación particular no necesita ser un árbol. Eso es cierto; siempre que su implementación proporcione la funcionalidad prometida en la especificación DOM, puede usar la estructura que desee para proporcionar esa funcionalidad.
En general si . En la mayoría de los navegadores, el DOM se implementa en un lenguaje de nivel inferior como C, y el navegador proporciona enlaces al entorno de JavaScript que pueden manipular las representaciones reales. De hecho, si nos fijamos en la pregunta ¿ Significado de "Mover DOM a Javascript"? , verá que Google está interesado en cambiar a una implementación DOM de JavaScript nativa (es probable que evite la necesidad de una función C ++ y un contenedor de JavaScript duplicado para esa función C ++; posiblemente también para aumentar el rendimiento).
Soy un poco más peligroso sobre este tema, pero entiendo que cuando se invoca un enlace DOM de JavaScript, el entorno de ejecución de JavaScript (que en sí se implementa en un lenguaje de nivel inferior como C) llama a la función DOM relevante (escrito en C / C ++) para manipular el DOM.
Si quieres profundizar más que eso, deberás hablar con alguien que realmente haga navegadores.
Sí. El IDL del DOM es independiente del idioma, por lo que puede implementarlo en cualquier idioma. "Escribir una implementación DOM" significa escribir código (en un idioma particular) para cumplir con las interfaces IDL descritas en las especificaciones DOM.
fuente
console.log(document.write);
oconsole.log(document.constructor);
: agregue.toString()
el parámetro de registro en los navegadores que no le proporcionan el texto de la función. Los objetos no tendrían necesariamente un equivalente reflejado en el código nativo. Además, la mayoría de las propiedades del objeto DOM son realmente captadores con comportamiento asociado.