function get_global_var(___name) { return eval(___name); } function set_global_var(___name,___value) { eval(___name+"=___value"); } var aa=11; Test(); WScript.Echo(aa);//22 function Test() { var aa=33; WScript.Echo(get_global_var("aa"));//11 set_global_var("aa",22); WScript.Echo(get_global_var("aa"));//22 WScript.Echo(aa);//33 }
在上面的例子中this從來就沒有指過Test,而一直都是WScript的實例。 如果我們寫一個語句:var test = new Test(); 這時Test里的this就是指的Test的一個實例了,這個實例中如果要使用Global的變量,Lostinet給出的是一個方法。 不過最簡單還是把global傳入對象,這樣定義Test:
然后這樣創建實例:var test = new Test(this); 就可以在Test實例中使用global的對象和屬性了。 是不是這樣,在new的實例中,this就指實例,否則都指WScript?如果這樣的話,換了腳本引擎,是不是情況又會不同?這個是標準嗎? new constructor[(arguments)]; new 運算符執行下面的任務: ?創建一個沒有成員的對象。 ?為那個對象調用構造函數,傳遞一個指針給新創建的對象作為 this 指針。 ?然后構造函數根據傳遞給它的參數初始化該對象。 要注意的是即使當前作用域內沒有調用new,但可能在其父作用域里是調用了new的,所以“在new的實例中,this就指實例,否則都指WScript?”,前半句對,而后半句不一定。