
1,当作为纯粹的函数调用时, this指向调用出的环境的上下文,看下面的例子
var x = 1; function test(){ var x = 0; alert(this.x); // alert(x); //
} test(); alert(x); //
alert(this.x); //
test()是在全局作用域里调用的,所以this就是指向全局作用域属性(window属性),而与test()函数里的x无关.
2,当作为对象调方法用时,this指的就是对象引用符'.'最前面的东东,
即作为某个对象的方法调用,这时this就指这个上级对象。
function test(){ alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m(); // 1
3,作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象
var x = 2; function test(){ this.x = 1; } var o = new test(); alert(x); //2
运行结果为2,表明全局变量x的值根本没变。
4, apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
var x = 0; function test(){ alert(this.x); } var o={}; o.x = 1; o.m = test; o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为
o.m.apply(o); //1
运行结果就变成了1,证明了这时this代表的是对象o