我想在 javascript 中使用 google v8 引擎访问我的 c++ 函数,并根据我的 javascript 函数中给出的参数返回结果。

我的javascript函数如下:

var result = MyFc(
                 {
                  'stringData':'abc',
                  'numberData':123,
                  'arrData':[1,2,3],
                  'objData':{'a':true,'b':false,'c':true},
                  'callback':function(){}
                 }
);

我用了
global->Set(v8::String::New("myFc"), v8::FunctionTemplate::New(MyFc));

v8::Handle<v8::Value> MyFc(const v8::Arguments& args) {
  obj = args[0]->...
  if( obj->stringData != 'abc' ){
      //....
  }
  if( obj->numberData != 123 ){
      //....
  }
  if( obj->arrData[2] != 3 ){
      //....
  }
  if( obj->objData->b == false ){
      //....
  }
  if( obj->callback !='abc' ){
      //....
  }
}

我的问题是如何在 c++ v8 中解析参数对象?我想在参数中访问对象的所有键值,值可以是数字、字符串、数组、匿名函数或对象。

最佳答案

使用 v8::Value 的类型检查方法( IsBoolean()IsArray()IsObject() 等),然后 v8::Handle<T>::Cast(v8::Handle<S>)args[i] 值转换为相应的类型。

您的代码应如下所示:

if (args[0]->IsArray()) {
    Handle<Array> array = Handle<Array>::Cast(arg[0]);
    for (int i = 0; i < array->Length(); i++) {
       //...
    }
}
if (args[1]->IsObject()) {
    Handle<Object> object = Handle<Object>::Cast(args[i]);
    Handle<Value> fieldValue = object->Get(String::New("a"));
    Handle<Value> callback = object->Get(String::New("callback"));
    if (callback->IsFunction()) {
        Handle<Function> fn = Handle<Function>::Cast(callback);
    }
}

关于c++ - 如何在 C++ v8 中解析参数对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8371003/

10-13 08:09