目标
上一篇通过 Hello World 示例了解了 v8 的核心概念和基本使用方式,这篇中我们要将 C++ 环境中的对象暴露到 Javascript 环境中,即在 Javascript 代码中可以使用在 C++ 环境中的数据。
代码 & 说明
1 | // expose-var.cpp |
在我们创建一个 Context
对象时,可以指定一个 ObjectTemplate
做为它的全局对象模板( Global ObjectTemplate ),我们只需要将 C++ 的变量挂(设置)到 Global ObjectTemplate
上,在 js 环境中就可以全局访问它们。
比如,浏览器中的 window
document
等对象就是以这种方式提供给 js 执行环境的。
ObjectTemplate 与 Object 的区别
在 v8 中,一个 Object
对象代表一个 js 对象;
而 ObjectTemplate
对象,官方文档说它是 Object
对象的 “Blueprint”,简单的说,ObjectTemplate
是 Object
对象的 “定义”,可以用它来生成相应的 Object
。
Gobal ObjectTemplate
1 | Local<ObjectTemplate> global_template = ObjectTemplate::New(isolate); |
这个 global_template
就是一个 ObjectTemplate
,context
根据这它来生成 Global
对象,而 Global
对象里面的属性,我们在 js 环境中是可以全局访问的。
相关链接
- Getting started with embedding V8: https://v8.dev/docs/embed#advanced-guide
- Node.js C++ Addons: https://nodejs.org/dist/latest-v10.x/docs/api/addons.html