虽不能至,心向往之

—— 巴人也,操C++口音,混迹于京师,勉强度日……《史记·corelito列传》
posts - 8, comments - 15, trackbacks - 0, articles - 0

使用V8——Google Chrome 的 JavaScript 引擎(2)

Posted on 2008-10-19 21:17 sufan 阅读(2939) 评论(4)  编辑 收藏 引用 所属分类: 翻译
全局模板(Global Template)
首先,我们需要使用全局模板(Global Template)对我们所作的修改进行控制:

v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();

该语句创建了一个新的全局模板,这个模板能够管理我们自己的上下文环境(context)和用户自定义(customization)。由于在V8中,每个上下文环境都是独立的,且能够拥有自己的全局模板,所以这一点显得很重要。在V8中,一个上下文环境实际上就是一个执行环境,使得许多分开的、相互之间没有联系的 JavaScript 应用程序能够运行在一个V8实例之中。

添加用户自定义函数
接下来,我们可以添加一个名为“plus”的新函数:

// plus function implementation - Add two numbers
v8::Handle<v8::Value> Plus(const v8::Arguments& args)

    unsigned 
int A = args[0]->Uint32Value();
    unsigned 
int B = args[1]->Uint32Value();
    
return v8_uint32(A +  B);

//...
//associates plus on script to the Plus function
global->Set(v8::String::New("plus"), v8::FunctionTemplate::New(Plus));

这个函数需要接受一个 const v8::Argument& 类型的值作为参数,并且要返回一个 v8::Handle<v8::Value>类型的值。我们使用在前面创建的全局模板指针来增加一个函数,并把“plus”和回调函数“Plus”联系起来。当我们每次在脚本程序中使用“plus”调用函数的时候,实际上调用的是我们在上面定义的“Plus”函数,这个函数功能非常简单:获取第一个和第二个参数并返回它们的和。

好了,现在我们就可以在脚本中使用这个用户自定义函数了:

plus(120,44);

还能这样使用这个函数的返回值:

= plus(1,2); 
if( x == 3){
   
// do something important here!
}

Feedback

# re: 使用V8——Google Chrome 的 JavaScript 引擎(2)  回复  更多评论   

2008-10-26 14:47 by 金山词霸2008
Google Chrome 的 JavaScript难道还和标准的javascript不一样?记得javascript已经是标准了。

# re: 使用V8——Google Chrome 的 JavaScript 引擎(2)  回复  更多评论   

2008-11-26 11:02 by tJun
V8 implements ECMAScript as specified in ECMA-262, 3rd edition
标准是标准,实现是实现。

# re: 使用V8——Google Chrome 的 JavaScript 引擎(2)  回复  更多评论   

2008-11-26 11:06 by lola
恩。v8是JS引擎啦,引擎是啥意思?引擎就是用来执行JS代码的东东啦。所以,v8是执行JS的东东,不是JS标准。

# re: 使用V8——Google Chrome 的 JavaScript 引擎(2)  回复  更多评论   

2010-11-22 13:59 by swn
请问博主有没有进一步的研究v8,比如如何扩展一个对象节点,包括其下的方法属性的扩展呢?

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理