【问题标题】:How does the browser extend the native JavaScript environment to add host objects like Window?浏览器如何扩展原生 JavaScript 环境以添加像 Window 这样的宿主对象?
【发布时间】:2023-03-22 00:38:01
【问题描述】:

chrome 浏览器如何向原生 JavaScript 环境提供宿主对象?宿主对象是否用 C++ 实现,然后与 V8 源代码链接?

Window 对象是如何提供给程序员使用的?显然,浏览器上的 JavaScript 环境与 node.js 环境不同。 Node.js 和 chrome 都使用 v8 引擎,但它们提供了两种不同的 JavaScript 环境。我想知道这是怎么做到的。

【问题讨论】:

  • 不太确定你在问什么,V8 内部将使用 C++/汇编程序等。但是解释的 JS 需要某种形式的绑定到这些内部结构。 Node.js 在这里会非常相似,所以也许这可能会有所帮助。 -> stackoverflow.com/questions/24042861/…
  • 浏览器如何提供Window、Document等宿主对象? V8 没有这些对象的概念。
  • 你调用 node.js n 原生环境吗? V8 has no notion of these objects. 是什么意思。浏览器与 node.js 相比或多或少不是原生的,它们都使用 C++ 和 JS 编写的附加 API 扩展了 V8 引擎提供的原生类型。并且 V8 提供了一个 API 来定义 C++ 中的类并在 C++ 和 JS v8: Embedder's Guide 之间进行通信。对于 Window、Nodes、Streams 等对象,您经常混合使用 JS 和 C++...
  • ^ 我想你已经回答了我的问题。我没有将 node.js 称为本地环境。我很抱歉,我的问题中的措辞很尴尬。当我说“V8 没有这些对象的概念”时,我指的是仅在浏览器环境中可用的对象。
  • 浏览器只是一个非常漂亮的渲染引擎,Chrome 将使用某种形式的绑定来暴露这些到 V8 引擎。 "V8 has no notion of these objects" ,V8 没有,但绑定可以。在某些方面,它与dll's 没有什么不同,只是绑定更多。

标签: javascript google-chrome dom v8


【解决方案1】:

V8 开发人员在这里。正如问题上的 cmets 已经提到的那样,V8 有一个用于嵌入器的 API,嵌入器用于向 JavaScript 公开他们需要的任何对象。选择完全取决于嵌入器:Chrome 做一件事,node.js 做另一件事,您自己的应用程序(如果您编写的话)可以做一些完全不同的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2012-10-06
    • 2020-10-24
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多