如何传递 ObjectTemplate::New in Google V8 的第二个参数
How to pass the second parameter of ObjectTemplate::New in Google V8?
我知道创建一个ObjectTemplate,我们可以对它做几件事。但我的问题不是关于那些众所周知的事情。
我想知道如何传递第二个参数。
正如官方指南所说:
每个函数模板都有一个关联的对象模板。这用于配置使用此函数创建的对象作为其构造函数。
而 ObjectTemplate::New 的第二个参数是由 FunctionTemplate
键入的构造函数。
static Local<ObjectTemplate> New(Isolate *isolate, Local<FunctionTemplate> constructor = Local<FunctionTemplate>());
这意味着这样:
void Constructor(const FunctionCallbackInfo<Value>& args)
{
// ...
}
Local<FunctionTemplate> _constructor = FunctionTemplate::New(isolate, Constructor);
Local<ObjectTemplate> tpl = ObjectTemplate::New(isolate, _constructor);
谁能给我一个演示,说明如何实现Constructor
功能。
我试过这个,但失败了:
void Constructor(const FunctionCallbackInfo<Value>& args)
{
Isolate* isolate = args.GetIsolate();
args.This()->Set(String::NewFromUtf8(isolate, "value"), Number::New(isolate, 233));
args.GetReturnValue().Set(args.This());
}
顺便说一下,我知道访问器的用例等等,我只想知道如何使用第二个参数。
在 V8 的 API 测试中,有一个 https://chromium.googlesource.com/v8/v8/+/master/test/cctest/test-api.cc#1901 的第二个 ObjectTemplate::New
参数示例:
LocalContext env;
Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(isolate);
v8::Local<v8::String> class_name = v8_str("the_class_name");
fun->SetClassName(class_name);
Local<ObjectTemplate> templ1 = ObjectTemplate::New(isolate, fun);
templ1->Set(isolate, "x", v8_num(10));
templ1->Set(isolate, "value", v8_num(233)); // From your last snippet.
Local<v8::Object> instance1 =
templ1->NewInstance(env.local()).ToLocalChecked();
CHECK(class_name->StrictEquals(instance1->GetConstructorName()));
如您所见,无需通过FunctionTemplate
间接实现属性创建,这就是ObjectTemplate
的用途。请参阅上面示例中的"x"和"value"属性。
你提到的这句话指的是别的东西。当你从FunctionTemplate
实例化一个函数时,JavaScript代码可以使用该函数作为构造函数。上述ObjectTemplate
可用于配置将以这种方式创建的对象。
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 打印无序映射的第二个元素,即集合
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 需要使用模板查找数组的第二个最小和最小值
- c++:交换向量中所有元组的第一个和第二个元素
- 如果条件,当我想第二个参数时
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 如何传递 ObjectTemplate::New in Google V8 的第二个参数