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?”,前半句对,而后半句不一定。