J'ai essayé de comprendre le DOM, et même si j'ai une bonne idée de ce que c'est, il y a certaines idées que je ne peux tout simplement pas cerner. Je vais énumérer ce que je pense que le DOM est et mes questions seront en ligne.
Le DOM est une représentation entièrement orientée objet de la page Web. Le standard DOM W3C constitue la base du DOM implémenté dans la plupart des navigateurs modernes.
Le DOM parle-t-il donc de la façon dont un document XML / HTML est représenté comme un modèle d'objet?
Le DOM ne spécifie pas que les documents doivent être implémentés comme un arbre ou un bosquet, ni ne spécifie comment les relations entre les objets doivent être implémentées.
De quelles autres manières le document peut-il être représenté?
Lorsque vous faites quelque chose comme ça -
document.write('welcome to my home page!');
l'objet document est fourni par le DOM. Les méthodes d'écriture sont les interfaces qui sont exposées à JavaScript par le DOM.
Ainsi, les objets et ses méthodes sont créés en tant qu'objets JavaScript par l'analyseur DOM et ensuite présentés au moteur JavaScript? Ou les objets et les méthodes du moteur d'analyse DOM sont-ils dans leur propre langue maternelle? Et est exposé au moteur JavaScript? Si tel est le cas, alors qui est responsable de la traduction de JavaScript vers la langue maternelle?
Que sont les liaisons linguistiques?
La liaison de langage est l'ensemble d'objets natifs du langage en question qui implémente chacune des interfaces dans la spécification DOM.
Les développeurs peuvent créer des liaisons de langage du DOM vers leur langue en suivant simplement l'IDL (Interface Definition Language) dans la spécification DOM.
Donc, si le moteur d'analyse DOM est implémenté en C ++, cela signifie-t-il que lorsque vous créez des liaisons de langage en suivant l'IDL, vous créez simplement des objets dans le langage spécifique, c'est-à-dire C ++ avec lequel votre moteur d'analyse DOM est construit?
la source
Réponses:
Ce qui suit est ma meilleure lecture des spécifications et références pertinentes. (J'ai trouvé les résumés de Mozilla sur les niveaux DOM et les liens associés particulièrement utiles.) J'encourage les corrections ou clarifications des autres.
Oui. La spécification DOM niveau 1 comprend deux parties: le noyau et le HTML . La spécification Core DOM décrit un DOM général qui pourrait être utilisé pour représenter n'importe quel document structuré. La spécification HTML DOM décrit comment utiliser le Core DOM pour décrire spécifiquement des documents HTML et inclut des interfaces spécifiques à HTML.
DOM de base ne suppose que le document est un arbre. L'
Node
interface est le "... type de données principal pour l'ensemble du [DOM]. Elle représente un seul nœud dans l' arborescence des documents ."Node
a plusieurs propriétés pour l' accès aux enfants, frères et soeurs, et les nœuds parents (par exempleparentNode
,frstChild
, etc.) qui implique une structure arborescente. Vous pouvez utiliser un arbre plat ou un arbre linéaire (par exemple, une liste chaînée), mais ce sera toujours une forme d'arbre.Comme le souligne George Mauer dans les commentaires, vous voulez peut-être dire que le modèle sous - jacent d'une implémentation particulière n'a pas besoin d'être un arbre. Cela est vrai; tant que votre implémentation fournit les fonctionnalités promises dans la spécification DOM, vous pouvez utiliser la structure que vous souhaitez pour fournir ces fonctionnalités.
En général, oui . Dans la plupart des navigateurs, le DOM est implémenté dans un langage de niveau inférieur comme C, et le navigateur fournit des liaisons à l'environnement JavaScript qui peuvent manipuler les représentations réelles. En fait, si vous regardez la question Signification de «Déplacer DOM en Javascript»? , vous verrez que Google est intéressé à passer à une implémentation native du DOM JavaScript (susceptible d'éviter d'avoir à la fois une fonction C ++ et un wrapper JavaScript en double pour cette fonction C ++; peut-être aussi pour des gains de performances).
Je suis un peu plus flou à ce sujet, mais ma compréhension est que lorsqu'une liaison DOM JavaScript est invoquée, l'environnement d'exécution JavaScript (qui est lui-même implémenté dans un langage de niveau inférieur comme C) appelle la fonction DOM appropriée (écrit en C / C ++) pour manipuler le DOM.
Si vous voulez aller plus loin, vous devrez parler à quelqu'un qui fabrique des navigateurs.
Oui. L'IDL du DOM est indépendant de la langue, de sorte que vous pouvez l'implémenter dans n'importe quelle langue. «Écrire une implémentation DOM» signifie écrire du code (dans un langage particulier) pour se conformer aux interfaces IDL décrites dans les spécifications DOM.
la source
console.log(document.write);
ouconsole.log(document.constructor);
- ajoutez.toString()
le paramètre de journal dans les navigateurs qui ne vous donnent pas le texte de la fonction. Les objets n'auraient pas nécessairement un équivalent en miroir dans le code natif. De plus, la plupart des propriétés des objets DOM sont en fait des getters avec un comportement associé.