如何为 v8::Object 分配名称以便脚本可以访问它?

How do I assign a name to a v8::Object so that scripts can access it?

我目前正在尝试使用 v8 向我的 C++ 应用程序添加脚本功能。目标是用JS处理缓冲区中的一些数据,然后return结果。我想我可以通过将 New 与适当的 BackingStore 结合使用来生成 ArrayBuffer。结果将是本地的。我现在想通过 v8::Script::Compilev8::Script::Run 运行 脚本。 ArrayBuffer 的名称是什么 - 或者我如何为其分配名称以便在脚本中访问它?如果我需要在同一个 ArrayBuffer 上 运行 多个脚本,是否需要将其设为 Global

如果您希望脚本能够访问 my_array_buffer,那么您必须将 ArrayBuffer 作为 属性 安装在全局对象上。请参阅从那里链接的 https://v8.dev/docs/embed for an introduction to embedding V8, and the additional examples。简而言之,它会归结为:

global_object->Set(context, 
                   v8::String::NewFromUtf8(isolate, "my_array_buffer"), 
                   array_buffer);

您无需将 ArrayBuffer 存储在 Global 中即可工作。