javaScript中的this

this是JavaScript中的一個關鍵字。它代表函數運行時,自動生成的一個內部對象,只能在函數內部使用。比如:

function  a(){
     this.x  = 1;
}

隨著函數使用場合的不同,this的值會發生變化,所以要分析this所在的函數是當做哪個對象的方法調用的,則該對象就是this所引用的對象。
this的使用一般有以下四種情況:

普通函數調用

普通函數調用屬于全局性調用,this就代表了全局變量。
比如:

const x = 1;
function a(){
     console.log(this.x);
}
a(); // 輸出為1

此時的this指的就是全局變量global,最后一句其實就等價于

window.a();//輸出為1
對象的方法調用

在 JavaScript 中,函數也是對象,因此函數可以作為一個對象的屬性,此時該函數被稱為該對象的方法,在使用這種調用方式時,this 被自然綁定到該對象。

const a = { 
 x : 1,
 y : function(x) { 
     console.log(this.x);
     } 
 }; 
 a.y(0); // 輸出1,this綁定到當前對象,即a對象

在這段代碼中,function(x){}這個函數就是a對象的一個方法,所以此時的this就是a對象。

構造函數調用

JavaScript 支持面向對象式編程,與主流的面向對象式編程語言不同,JavaScript 并沒有類的概念,而是使用原型繼承方式。相應的,JavaScript 中的構造函數也很特殊,如果不使用 new 調用,則和普通函數一樣。一般構造函數以大寫字母開頭,如果調用正確,this 綁定到新創建的對象上。

function a(){
  this.x = 1;
}
const b = new a();
console.log(b.x); //輸出1
apply調用

apply()是函數對象的一個方法,它的作用是改變函數的調用對象,它的第一個參數就表示改變后的調用這個函數的對象。所以this指的就是這第一個參數。

const x = 0;
const a = { 
 x : 1,
 y : function() { 
     console.log(this.x);
     } 
 }; 
a.y.apply(); // 輸出0

apply()的參數為空時,默認調用全局對象。因此,這時的運行結果為0,證明this指的是全局對象。
若將給apply()傳入參數,即

a.y.apply(a); // 輸出1

則表明此時的this指的是對象a

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容