Chinaunix首页 | 论坛 | 博客
  • 博客访问: 123527
  • 博文数量: 32
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-03 17:57
文章分类

全部博文(32)

文章存档

2011年(1)

2009年(8)

2008年(23)

我的朋友

分类:

2008-04-16 11:00:32

    上节中提到的3个关键因素都需要一些JSAPI调用:
    Runtime: 使用JS_NewRunTime来创建,当你不用它了时,用JS_DestroyRuntime来销毁。如果你的应    用程序与spidermonkey一起结束运行,使用JS_ShutDown来释放剩余的缓存资源。
    Context: 使用JS_NewContext和JS_DestroyContext。为了最大限度满足ECMAScript标准,应用程    序应该用JS_SetOptions来激活JSOPTION_VAROBJFIX。
    Global object: 要创建这个对象,你需要一个有JSCLASS_GLOBAL_FLAGS选项的JSCLASS。下面的例子    定义了一个非常基础的JSClass,没有方法也没有属性。 使用JS_NewObject创建全局变量。
    用JS_InitStandardClasses来使它满足标准的js全局变量。
    对于一个简单的应用程序来说,上面提到的那些看起来有点儿多。从下面的例子可以看出来,总共有大约有50行代码。但是JSAPI的设计是为了满足那些需要多线程,多context,多global object的应用程序的。它是个合理粒度的API,支持上述部分的不同组合,并且向应用程序提供对SpiderMonkey行为的精确控制。
    下面是一个样本代码,是JSAPI的最小集合应用。包含了上面提到的所有东西。
#include "jsapi.h"
/*全局对象的类*/
static JSClass global_class=
{
    "global", JSCLASS_GLOBAL_FLAGS, JS_PropertyStub,
        JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
        JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub,
        JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS
};

int main(int argc, const char*argv[])
{
    /*JS 变量*/
    JSRuntime *rt;
    JSContext *cx;
    JSObject *global;
    .
    .
    .
    /*创建一个JS runtime*/
    rt = JS_NewRuntime(8L*1024L*1024L);
    if(rt == NULL)
        return 1;
    /*创建一个context*/
    cx = JS_NewContext(rt, 8192);
    if(cx == NULL)
        return 1;
    JS_SetOption(cx, JSOPTION_VAROBJFIX);
    /*创建Global object*/
    global = JS_NewObject(cx, &global_class, NULL, NULL);
    if(global == NULL)
        return 1;
    /*Populate the global object with the standard globals, like Object and Array*/
    if(!JS_InitStandardClasses(cx,global))
        return 1;
    .
    .
    .
    /*你应用程序的代码,可能包含JSAPI调用来创建自己的用户JS对象并且运行脚本*/
    .
    .
    .

    /*清除*/
    JS_DestroyContext(cx);
    JS_DestroyRuntime(rt);
    JS_ShutDown();
    return 0;
}




阅读(1344) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~