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不是全域對象,我對程式碼做一些改變: 複製程式碼 程式碼如下: var x = 2; function test(){ this.x = 1; alert(x); //2 運行結果為2,表示全域變數x的值根本沒改變。 情況四apply呼叫 apply()是函數對象的一個方法,它的作用是改變函數的呼叫對象,它的第一個參數就表示改變後的呼叫這個函數的物件。因此,this指的就是這第一個參數。 複製程式碼 程式碼如下: var x = 0; test(){ alert(this.x); } var o={} ; 🎜> o.m = test; o.m.apply(); //0 apply()的參數為空時,預設為全域物件。因此,這時的運行結果為0,證明this指的是全域物件。 如果把最後一行程式碼修改為 複製程式碼 程式碼如下: 程式碼如下:碼>o.m.apply(o); //1運行結果變成了1,證明了這時this代表的是對象o