var a = 1;
function test2(){
alert("a的值是:"+this.a); // 加了this就只在主调对象里搜索
}
test2(); // 输出“a的值是1”
test2.call(window); // 输出“a的值是1”
var o = new Object();
test2.call(o); // 输出“undefined”;</span>
分析:
this前缀的作用:
1.当在函数里访问一个变量时,如果使用this前缀,程序只搜索主调对象里是否包含该实例变量,如果不存在,当成undefined处理
2.如果没有this前缀,
a.程序会先搜索当前函数中是否存在该局部变量;
b.如果a搜索不存在,程序会搜索主调对象中是否存在该实例变量;
c.如果b搜索还不存在,程序会搜索主调对象所在的对象中是否存在,若没有,则一直向上搜索,直到window对象为止
注意与下面例子的区别:
var myfun = function(a, b){
alert("a的值:"+a);
alert("b的值:"+b);
this.test = a + b;
};
myfun(1, 2);
alert(window.test); // 输出“3”
var o = new Object();
myfun.call(o, 2, 3);
alert(o.test); // <span style="font-family: FangSong_GB2312;">输出“5”</span>
注意:第二个例子中test是定义在函数里的实例变量,哪个对象调用该函数,this就代表哪个对象;而第一个例子中的a是属于window的局部变量