this是javascript中比较重要的一个关键字,它代表在函数运行时,自动生成的一个内部对象,只能在函数内部使用。随着函数使用场合的不同,this的值会发生变化,但是总的原则是不变的——this指的是调用函数的那个对象。
- 纯粹的函数调用
这是函数最常用的调用方法,在这里,this的指向是全局,也就是global;
function test(){
this.x = 1;
alert(this.x);
}
test(); // 执行结果是1
为了证明是全局对象:
var x = 1;
function test(){
alert(this.x);
}
test(); // 执行结果还是1
接下来,再换一种:
var x = 1;
function test(){
this.x = 0;
}
test();
alert(x); // 执行结果是 0
- 作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
function test() {
alert(this.x);
}
var o = {};
o.x = 2;
o.m = test;
o.m(); // 执行结果是2
- 作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); // 1
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(x); //2
- 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。
文章参考自:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html