我正在寻找关于这个问题的详细答案。我已经知道的因此,我对调用堆栈和回调有一些了解,并且浏览器通过web API添加功能,web API通过事件循环添加回调。我还读了一些关于js引擎有api的文章。我想了解的是web API是如何向js引擎公开的(如果这是关于js引擎有一个api,那么对该api如何工作的一些描述就可以了)如何通过javascript操纵渲染引擎的行为,如操纵dom、cssom等(如果我理解正确,这相当于询问web API如何工作)谢谢
3qpi33ja1#
从(c等)应用程序开发的Angular 来看,javascript引擎是可嵌入的库;浏览器就是这样的嵌入器。任何库都定义了一个可以使用它的公共接口——它的应用程序编程接口(简称api)。js引擎的api应该是什么样子没有标准;每个引擎定义自己的引擎,并根据需要随时间演化。v8引擎在这里。JS引擎API的核心功能是允许嵌入器向嵌入的自己的C实现支持的JavaScript环境提供对象和功能。本质上,这定义了一个Map,有时也称为“绑定”。例如,嵌入程序可以说“我希望有一个 document 对象,并且它应该看起来具有属性 .location 这是由我的getter函数支持的 DocumentLocationGetter() {...} ,它应该(似乎)有一个方法 .createElement() 这是由我的其他功能支持的 DocumentCreateElement(...) {...} ”等等。这就是你两个问题的答案:浏览器向javascript公开某些函数,然后可以从那里调用这些函数。浏览器决定调用此类函数时要执行的操作(例如:添加或删除dom节点、更改css属性、将事件处理程序存储在某个元素的事件处理程序列表中等等)。当然,浏览器/嵌入式程序也可以调用js引擎,例如,在调用事件处理程序时,它可以告诉引擎“请执行函数” button1_clicked 现在”。有关更多详细信息,请参见例如v8.dev/docs/embed。
document
.location
DocumentLocationGetter() {...}
.createElement()
DocumentCreateElement(...) {...}
button1_clicked
1条答案
按热度按时间3qpi33ja1#
从(c等)应用程序开发的Angular 来看,javascript引擎是可嵌入的库;浏览器就是这样的嵌入器。任何库都定义了一个可以使用它的公共接口——它的应用程序编程接口(简称api)。js引擎的api应该是什么样子没有标准;每个引擎定义自己的引擎,并根据需要随时间演化。v8引擎在这里。
JS引擎API的核心功能是允许嵌入器向嵌入的自己的C实现支持的JavaScript环境提供对象和功能。本质上,这定义了一个Map,有时也称为“绑定”。例如,嵌入程序可以说“我希望有一个
document
对象,并且它应该看起来具有属性.location
这是由我的getter函数支持的DocumentLocationGetter() {...}
,它应该(似乎)有一个方法.createElement()
这是由我的其他功能支持的DocumentCreateElement(...) {...}
”等等。这就是你两个问题的答案:浏览器向javascript公开某些函数,然后可以从那里调用这些函数。浏览器决定调用此类函数时要执行的操作(例如:添加或删除dom节点、更改css属性、将事件处理程序存储在某个元素的事件处理程序列表中等等)。当然,浏览器/嵌入式程序也可以调用js引擎,例如,在调用事件处理程序时,它可以告诉引擎“请执行函数”
button1_clicked
现在”。有关更多详细信息,请参见例如v8.dev/docs/embed。