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 以安装拦截 所有 属性 查询的单个处理程序。