JavaScript中的this指針

  this指針是面向對象程序設計中的一項重要概念,它表示當前運行的對象。在實現對象的方法時,可以使用this指針來獲得該對象自身的引用。

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

以下是引用片段:
<script language="JavaScript" type="text/javascript"> 
<!-- 
//創建兩個空對象 
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章