[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()