this是Javascript語言的一個關鍵字。
它代表函數運行時,自動產生的一個內部對象,只能在函數內部使用。例如,
〜function test(){
〜〜function test(){
this.x = 1;
}
隨著函數使用場合的不同,this的值會改變。但是有一個總的原則,那就是this指的是,呼叫函數的那個物件。
以下分為四種情況,詳細討論this的用法。
情況一:純粹的函數調用
這是函數最通常的用法,屬於全局性調用,因此this就代表全域物件Global。
請看下面這段程式碼,它的運作結果是1。
程式碼如下:
〜 〜 test( .x = 1;
alert(this.x);
}
test(); // 1
test(); // 1
function test(){
alert(this.x);
alert(this.x);
}
運行結果還是1。再變一下:
var x = 1;
function test(){
this.x = 0;
}
}
情況二:作為物件方法的調用
函數還可以作為某個物件的方法調用,這時this就指這個上級物件。
、function test(>
〜 〜) test( (this.x);
}
var o = {};
o.x = 1;
o.x = 1;
o.m(); // 1
情況三作為建構子呼叫
所謂建構函數,就是透過這個函數產生一個新物件(object) 。這時,this就指這個新物件。
〜 㜀〜 㜀〜 㜀〜 㜀㜀 㜀㜀㜀 㜀㜀 㜀㜀㜀 㜀㜀 ) .x = 1;
}
var o = new test();
alert(o.x); // 1
『結果為1。為了顯示這時this不是全域對象,我對程式碼做一些改變:
複製程式碼
this.x = 1;
alert(x); //2
運行結果為2,表示全域變數x的值根本沒改變。
情況四apply呼叫
apply()是函數對象的一個方法,它的作用是改變函數的呼叫對象,它的第一個參數就表示改變後的呼叫這個函數的物件。因此,this指的就是這第一個參數。
複製程式碼
程式碼如下:
o.m.apply(); //0
apply()的參數為空時,預設為全域物件。因此,這時的運行結果為0,證明this指的是全域物件。
如果把最後一行程式碼修改為
複製程式碼
程式碼如下:
程式碼如下:
碼>o.m.apply(o); //1
運行結果變成了1,證明了這時this代表的是對象o