深入認識JavaScript中的this指標

來源:互聯網
上載者:User

  this指標是物件導向程式設計中的一項重要概念,它表示當前啟動並執行對象。在實現對象的方法時,可以使用this指標來獲得該對象自身的引用。

  和其他物件導向的語言不同,JavaScript中的this指標是一個動態變數,一個方法內的this指標並不是始終指向定義該方法的對象的,在上一節講函數的apply和call方法時已經有過這樣的例子。為了方便理解,再來看下面的例子:

以下是引用片段:
<script language="JavaScript" type="text/javascript">
<!--
//建立兩個Null 物件
var obj1=new Object();
var obj2=new Object();
//給兩個對象都添加屬性p,並分別等於1和2
obj1.p=1;
obj2.p=2;
//給obj1添加方法,用於顯示p的值
obj1.getP=function(){
      alert(this.p); //表面上this指標指向的是obj1
}
//調用obj1的getP方法
obj1.getP();
//使obj2的getP方法等於obj1的getP方法
obj2.getP=obj1.getP;
//調用obj2的getP方法
obj2.getP();
//-->
</script> 

  從代碼的執行結果看,分別彈出對話方塊顯示1和2。由此可見,getP函數僅定義了一次,在不同的場合運行,顯示了不同的運行結果,這是有this指標的變化所決定的。在obj1的getP方法中,this就指向了obj1對象,而在obj2的getP方法中,this就指向了obj2對象,並通過this指標引用到了兩個對象都具有的屬性p。

  由此可見,JavaScript中的this指標是一個動態變化的變數,它表明了當前運行該函數的對象。由this指標的性質,也可以更好的理解JavaScript中對象的本質:一個對象就是由一個或多個屬性(方法)組成的集合。每個集合元素不是僅能屬於一個集合,而是可以動態屬於多個集合。這樣,一個方法(集合元素)由誰調用,this指標就指向誰。實際上,前面介紹的apply方法和call方法都是通過強制改變this指標的值來實現的,使this指標指向參數所指定的對象,從而達到將一個對象的方法作為另一個對象的方法運行。

  每個對象集合的元素(即屬性或方法)也是一個獨立的部分,全域函數和作為一個對象方法定義的函數之間沒有任何區別,因為可以把全域函數和變數看作為window對象的方法和屬性。也可以使用new操作符來操作一個對象的方法來返回一個對象,這樣一個對象的方法也就可以定義為類的形式,其中的this指標則會指向新建立的對象。在後面可以看到,這時對象名可以起到一個命名空間的作用,這是使用JavaScript進行物件導向程式設計的一個技巧。例如:

以下是引用片段:
var namespace1=new Object();
namespace1.class1=function(){
    //初始化對象的代碼
}
var obj1=new namespace1.class1(); 

  這裡就可以把namespace1看成一個命名空間。

  由於對象屬性(方法)的動態變化特性,一個對象的兩個屬性(方法)之間的互相引用,必須要通過this指標,而其他語言中,this關鍵字是可以省略的。如上面的例子中:

以下是引用片段:
obj1.getP=function(){
      alert(this.p); //表面上this指標指向的是obj1

來自csdn論壇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.