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從來(lái)就沒(méi)有指過(guò)Test,而一直都是WScript的實(shí)例。 如果我們寫(xiě)一個(gè)語(yǔ)句:var test = new Test(); 這時(shí)Test里的this就是指的Test的一個(gè)實(shí)例了,這個(gè)實(shí)例中如果要使用Global的變量,Lostinet給出的是一個(gè)方法。 不過(guò)最簡(jiǎn)單還是把global傳入對(duì)象,這樣定義Test:
然后這樣創(chuàng)建實(shí)例:var test = new Test(this); 就可以在Test實(shí)例中使用global的對(duì)象和屬性了。 是不是這樣,在new的實(shí)例中,this就指實(shí)例,否則都指WScript?如果這樣的話,換了腳本引擎,是不是情況又會(huì)不同?這個(gè)是標(biāo)準(zhǔn)嗎? new constructor[(arguments)]; new 運(yùn)算符執(zhí)行下面的任務(wù): ?創(chuàng)建一個(gè)沒(méi)有成員的對(duì)象。 ?為那個(gè)對(duì)象調(diào)用構(gòu)造函數(shù),傳遞一個(gè)指針給新創(chuàng)建的對(duì)象作為 this 指針。 ?然后構(gòu)造函數(shù)根據(jù)傳遞給它的參數(shù)初始化該對(duì)象。 要注意的是即使當(dāng)前作用域內(nèi)沒(méi)有調(diào)用new,但可能在其父作用域里是調(diào)用了new的,所以“在new的實(shí)例中,this就指實(shí)例,否則都指WScript?”,前半句對(duì),而后半句不一定。