this:函数运行时,自动生成的内部对象,代表当前调用该函数的对象,this只能在函数内部使用。
存在下面四种情况的this用法:
1、this指向全局对象global
<script type="text/javascript">
var o = 0;
function test() {
var o = 1;
return this.o;
}
alert(test());//0
</script>
2、函数作为对象的方法,this指向该对象
<script type="text/javascript">
var o = 0;
function test() {
return this.o;
}
var obj = {};
obj.o = 1;
obj.m = test;
alert(obj.m());//1
</script>
3、函数作为对象的构造函数,this指向使用该构造函数new出来的对象
<script type="text/javascript">
var o = 0;
function test() {
var o = 2;
return this.o;
}
var obj = new test();
obj.o = 1;
alert(obj.o);//1
</script>
4、使用apply方法改变函数中this的指向
<script type="text/javascript">
var o = 0;
function test() {
return this.o;
}
var obj = new test();
obj.o = 1;
obj.m = test;
var obj1 = {};
obj1.o = 2;
alert(obj.m.apply());//参数为空则默认使用global对象劫持obj.m方法,所以test方法中的this指向了global对象,所以输出0
alert(obj.m.apply(obj1));//此时test方法中的this指向了obj1对象,所以输出2
</script>