首页 > 代码库 > JavaScript中的this的指向

JavaScript中的this的指向

this是JS的关键字,随着函数使用场合的不同,this值会发生变化。但总的原则是,this总是指向调用this所在函数的那个对象

1、纯函数调用

function test(){
this.x=1;
alert(x);
} 
test();

这里的this就是全局变量。看下面的例子就能很好的理解this就是全局对象Global。

var x=1;
function test(){
   alert(this.x);
}
test();  //1

var x=1;
function test(){
   this.x=0;
}
test();
alert(x);  //0

在JavaScript的变量作用域中规定,“全局变量都是window对象的属性。”因此执行test()时相当于window.test(),此时test函数体内的this关键字的指向变成了window对象。即将window对象的x变为0。

var x=1;
var b={
   x:2,
   getX:function(){
      return this.x;
   }
 };
alert(this.x);     //1
alert(b.getX()); //2

在上面的代码中,alert(this.x)中this指向window,所以在全局中搜寻x的值,为1;

alert(b.getX())中由于x所在函数作为对象b的方法被调用,this指向了b,因此在b中搜寻x的值,为2。

2、作为方法调用,那么this指调用方法的这个对象。

function test(){
alert(this.x);
}
var o={};
o.x=1;
o.m=test;
o.m();  //1

3、作为构造函数调用。此时this指向新生成的对象。

function Test(){
   this.x=1;
}
var o= new Test();
alert(o.x);  //1

 4、apply调用。this指向的是apply中的第一个参数。

var x=0;
function test(){
   alert(this.x);
}   
var 0={};
o.x=1;
o.m=test();
o.m.apply();  //0
o.m.apply(o);//1

 当apply没有参数时,表示为全局对象。所以值为0。

JavaScript中的this的指向