加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在c v8中解析参数对象

发布时间:2020-12-16 04:53:31 所属栏目:百科 来源:网络整理
导读:我希望通过google v8引擎访问 javascript到我的c函数,并根据我的javascript函数中的参数返回结果. 我的javascript函数如下: var result = MyFc( { 'stringData':'abc','numberData':123,'arrData':[1,2,3],'objData':{'a':true,'b':false,'c':true},'callba
我希望通过google v8引擎访问 javascript到我的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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读