2017-10-13 5 views
1

Comment le navigateur chrome fournit-il des objets hôtes à l'environnement JavaScript natif? Les objets hôtes sont-ils implémentés en C++, puis liés au code source V8?Comment le navigateur étend-il l'environnement JavaScript natif pour ajouter des objets hôtes comme Window?

Comment l'objet Window est-il mis à la disposition du programmeur? Clairement, l'environnement JavaScript sur le navigateur est différent de l'environnement node.js. Node.js et chrome utilisent tous les deux le moteur v8, mais ils fournissent deux environnements JavaScript différents. Je me demandais comment cela a été rendu possible.

+0

Pas vraiment sûr de ce que vous demandez, en interne le V8 utilisera C++/assembleur etc Mais le JS interprété aura besoin d'une forme de liaison à ces structures internes. Node.js, serait très similaire ici, alors peut-être que cela pourrait aider. -> https://stackoverflow.com/questions/24042861/nodejs-what-does-process-binding-mean – Keith

+0

Comment le navigateur fournit-il des objets hôte tels que Window, Document, etc.? V8 n'a aucune notion de ces objets. –

+1

Appellez-vous l'environnement natif _node.js_ n? Que voulez-vous dire par 'V8 n'a aucune notion de ces objets. Le navigateur n'est ni plus ni moins natif que _node.js_, les deux étendent les types natifs fournis par le moteur V8 avec une API supplémentaire qui est écrite en C++ et JS. Et V8 fournit une API pour définir des classes en C++ et pour communiquer entre C++ et JS [v8: Embedder's Guide] (https://github.com/v8/v8/wiki/Embedder's-Guide). Vous avez souvent un mélange de JS et C++ pour des objets comme Window, Nodes, Streams, ... –

Répondre

2

Développeur V8 ici. Comme les commentaires sur la question mentionnent déjà, V8 a un API pour les intégrateurs, que les intégrateurs utilisent pour exposer tous les objets dont ils ont besoin pour JavaScript. Le choix dépend entièrement de l'intégrateur ici: Chrome fait une chose, node.js une autre, votre propre application (si vous en écrivez une) pourrait faire quelque chose de complètement différent.