1. 程式人生 > >JavaScript中的this的指向

JavaScript中的this的指向

全局 code app 屬性。 () color asc return apply()

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的指向