V8-SetAccesor无法添加到现有模板

时间:2018-11-14 15:07:06

标签: c++ v8

我有以下代码:

        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中使用我的吸气剂时,他会告诉我:

BSON 1 : {foo: 3}
BSON 2 : {foo: 2}

如何添加此字段的访问器?

1 个答案:

答案 0 :(得分:1)

对于具有不同数量属性的对象,请勿使用相同的ObjectTemplate

我可以想到两种选择;哪个更好取决于您应用程序的其余部分:

  • 每次都创建一个新的Object,然后直接在该SetAccessor上调用CreateDataProperty(或Object?)。不需要ObjectTemplate

  • SetHandler上使用ObjectTemplate安装一个可拦截所有属性查询的处理程序。