Antsam

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
[img]http://www.blogcn.com/User12/antsam/Upload/20041217142710.jpg [/img]

这是一幅关于JavaScript中四个重要组成的关系:
Runtime、Script、Context和Object

其中有一点必须注意的是:object可以在不同的context之间共享。
在使用JS的过程中你肯定会想到,怎么样在一个JS文件中调用另外
一个JS文件中定义的函数或变量?

这个旧需要通过共享一个Object来实现,context使之脚本执行的
堆栈空间(fixed me),那本脚本中定义的变量(全局)和函数的
信息则是保存在一个Gloabal Object中的,这样我们只要把两个脚
本共享一个Object,就可以实现上面的问题了。

例如:
test.js:

var m = 0;
function addValues1(a,b)
{
   result = a + b + m+n;
   m = m + 10;
   return result;
}

test2.js:
var n =100;
function addValues2(a,b)
{
   result = a + b + n;
   n = n + 10;

   result += addValues1(a,b);
   return result;
}
代码中:
……
jsp1 = JS_CompileFile(ct1, globalObj, "test.js";
JS_ExecuteScript(ct1, globalObj, jsp1, &rval); 
jsp2 = JS_CompileFile(ct2, globalObj, "test2.js";
JS_ExecuteScript(ct2, globalObj, jsp2, &rval); 
……
JS_CallFunctionName(ct1, globalObj, "addValues1", 2, args, &rval);
……
JS_CallFunctionName(ct2, globalObj, "addValues2", 2, args, &rval);

利用这个特性我们可以定义我们脚本的语法:
在sytax.js文件中我们定义一些接口(DOM):
BeginMaterial()、EndMaterial()
BeginPass()、EndPass()

然后既可以写Material的脚本并执行了:
BeginMaterial()
{
    BeginPass()
    {
        ……
    }
    EndPass()

    BeginPass()
    {
        ……
    }
    EndPass()
}
EndMaterial()
posted on 2004-12-29 15:38  Antsam  阅读(1170)  评论(0编辑  收藏  举报