引用网址苑一峰的网络日志
this是JS中的一个关键字,在函数运行时,在函数内部会自动生成一个this对象,只能在函数体内部使用
在函数的不同场合,this有不同的值。总的来说,this就是函数运行时所在的环境对象。
函数调用
这是函数最常用的情况,属于全局调用,因此this就代表全局对象。
var x=1;
function test(){
console.log(this.x);
}
test();//输出1
作为对象的方法调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象
function test(){
console.log(this.x);
}
var obj={};
obj.x=1;
obj.m=test;
obj.m();//输出1
作为构造函数调用
所谓构造函数,就是通过这个函数,可以生成一个新的对象。这时,this就指这个新的对象
function test(){
this.x=1;
}
var obj=new test();
obj.x;//输出1
比较
var x=2;
function test(){
this.x=1;
}
var obj=new test();
x;//x的值没有变化,输出2
apply调用
apply()是函数的一个方法,作用是改变函数的调用对象。他的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数
var x=0;
function test(){
console.log(this.x);
}
var obj={};
obj.x=1;
obj.m=test;
obj.m.apply(); //输出0
apply()参数为空的时候,默认调用全局对象。因此上述代码运行结果为0,证明this是全局对象。如果把最后一行代码修改为
obj.m.apply(obj);//输出1
最后结果变成了1,证明this代表的对象obj