v8访问函数和对象方法参数

时间:2014-05-19 14:21:06

标签: javascript c++ v8

是否可以在Google的V8中覆盖现有的对象方法?例如,当在java脚本中调用String.fromCharCode时,它实际上将调用我的c ++函数MyFromCharCode,它将解析并检查参数,然后调用实际的String.fromCharCode,就好像什么都没发生一样。这需要用它自己的方法定义我自己的String对象吗?

如果我这样做:

global->Set(v8::String::New("unescape"), v8::FunctionTemplate::New(Unescape));

然后在java脚本中调用unescape时,它将调用我的自定义函数。

v8::Handle<v8::Value> Unescape(const v8::Arguments& args) {
    //do some stuff here
    return call_the_real_unescape_from_js(args);
}

这可能吗?如果对象方法也有这样的东西(对于现有的对象,如:String,Array)。

或者,如果在调用函数时有任何其他方法可以访问函数&#39; s /方法的参数(函数和方法是标准的,比如unescape,eval,String.fromCharCode,而不是自定义的)

稍后编辑:

管理调用标准函数:

v8::Handle<v8::Object> global = context->Global();
v8::Handle<v8::Value> value = global->Get(v8::String::New("unescape"));
v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(value);
v8::Handle<v8::Value> args[1];
v8::Handle<v8::Value> js_result;
args[0] = v8::String::New("Need%20tips%3F%20Visit%20Schools%21");
js_result = func->Call(global, 1, args);
v8::String::AsciiValue ascii(js_result);
printf("%s\n", ascii);

仍在研究如何覆盖和调用现有对象的方法(如String.fromChardCode)。

0 个答案:

没有答案