如何迭代Object中的属性

And*_*all 3 c++ v8 node.js embedded-v8

我想在V8 C++函数中迭代一个Object.

的NodeJS:

node.addProperties({"user":"testuser","password":"passwd"};
Run Code Online (Sandbox Code Playgroud)

我想将"user"和"password",名称和值都传递给C++方法,该方法采用如下参数:

AddProperty(char * name, char * value);
Run Code Online (Sandbox Code Playgroud)

名称/值对的数量可能不同,因此我需要一个通用的解决方案.

我可以得到一些帮助,以便走上正轨.

我一直在为Node和V8编写更简单的C++包装器,但我对这个问题的想法已经不多了:)

Esa*_*ija 6

假设最近有足够的v8(io.js或节点0.12),the_object从js传递的对象在哪里

Local<Array> property_names = the_object->GetOwnPropertyNames();

for (int i = 0; i < property_names->Length(); ++i) {
    Local<Value> key = property_names->Get(i);
    Local<Value> value = the_object->Get(key);

    if (key->IsString() && value->IsString()) {
        String::Utf8Value utf8_key(key);
        String::Utf8Value utf8_value(value);
        AddProperty(*utf8_key, *utf8_value);
    } else {
        // Throw an error or something
    }
}
Run Code Online (Sandbox Code Playgroud)