V8 - SetAccessor 无法添加到现有模板
V8 - SetAccesor can't add to a existing template
我有以下代码:
while (bson_iter_next(&iter))
{
const char* key = bson_iter_key(&iter);
if (!_paths.count(key))
{
_template->SetAccessor(
String::NewFromUtf8(isolate, key),
&BSONObject::getter,
&BSONObject::setter
);
}
}
Local<Object> obj = _template->NewInstance();
我构建了一个包含文档 BSON 中所有字段的对象。我有一份文件清单,它们都经过这段代码。我意识到如果第一个没有其他人拥有的领域,他们将不会被定义。我解释一下:
BSON 1 : {foo: 3}
BSON 2 : {foo: 2, boo: 4}
当我在 JS 中使用我的 getter 时,他会告诉我:
BSON 1 : {foo: 3}
BSON 2 : {foo: 2}
如何添加该字段的访问器?
不要对具有不同数量属性的对象使用相同的 ObjectTemplate
。
我可以想到两种选择;哪个更好取决于您应用程序的其余部分:
每次都创建一个新的 Object
,然后直接在那个 Object
上调用 SetAccessor
(或 CreateDataProperty
?)。不需要 ObjectTemplate
。
在 ObjectTemplate
上使用 SetHandler
以安装拦截 所有 属性 查询的单个处理程序。
我有以下代码:
while (bson_iter_next(&iter))
{
const char* key = bson_iter_key(&iter);
if (!_paths.count(key))
{
_template->SetAccessor(
String::NewFromUtf8(isolate, key),
&BSONObject::getter,
&BSONObject::setter
);
}
}
Local<Object> obj = _template->NewInstance();
我构建了一个包含文档 BSON 中所有字段的对象。我有一份文件清单,它们都经过这段代码。我意识到如果第一个没有其他人拥有的领域,他们将不会被定义。我解释一下:
BSON 1 : {foo: 3}
BSON 2 : {foo: 2, boo: 4}
当我在 JS 中使用我的 getter 时,他会告诉我:
BSON 1 : {foo: 3}
BSON 2 : {foo: 2}
如何添加该字段的访问器?
不要对具有不同数量属性的对象使用相同的 ObjectTemplate
。
我可以想到两种选择;哪个更好取决于您应用程序的其余部分:
每次都创建一个新的
Object
,然后直接在那个Object
上调用SetAccessor
(或CreateDataProperty
?)。不需要ObjectTemplate
。在
ObjectTemplate
上使用SetHandler
以安装拦截 所有 属性 查询的单个处理程序。