天天看點

《JavaScript面向對象精要》——1.3 引用類型

本節書摘來自異步社群《javascript面向對象精要》一書中的第1章,第1.3節,作者:【美】nicholas c. zakas 譯者: 胡世傑 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

引用類型是指javascript中的對象,同時也是你在該語言中能找到的最接近類的東西。引用值是引用類型的執行個體,也是對象的同義詞(本章後面将用對象指代引用值)。對象是屬性的無序清單。屬性包含鍵(始終是字元串)和值。如果一個屬性的值是函數,它就被稱為方法。javascript中函數其實是引用值,除了函數可以運作以外,一個包含數組的屬性和一個包含函數的屬性沒有什麼差別。

當然,在使用對象前,你必須先建立它們。

1.3.1 建立對象

有時候,把javascript對象想象成圖1-2中的哈希表可以幫助你更好地了解對象結構。

《JavaScript面向對象精要》——1.3 引用類型

javascript有好幾種方法可以建立對象,或者說執行個體化對象。第一種是使用new操作符和構造函數。構造函數就是通過new操作符來建立對象的函數——任何函數都可以是構造函數。根據命名規範,javascript中的構造函數用首字母大寫來跟非構造函數進行區分。例如下列代碼執行個體化一個通用對象,并将它的引用儲存在object中。

因為引用類型不在變量中直接儲存對象,是以本例中的object變量實際上并不包含對象的執行個體,而是一個指向記憶體中實際對象所在位置的指針(或者說引用)。這是對象和原始值之間的一個基本差别,原始值是直接儲存在變量中的。

當你将一個對象指派給變量時,實際是指派給這個變量一個指針。這意味着,将一個變量指派給另一個變量時,兩個變量各獲得了一份指針的拷貝,指向記憶體中的同一個對象。例如,

這段代碼先用new建立了一個對象并将其引用儲存在object1中。然後将object1的值指派給object2。兩個變量都指向第一行被建立的那個對象執行個體,如圖1-3所示。

《JavaScript面向對象精要》——1.3 引用類型

**

1.3.2 對象引用解除**

javascript語言有垃圾收集的功能,是以當你使用引用類型時無需擔心記憶體配置設定。但最好在不使用對象時将其引用解除,讓垃圾收集器對那塊記憶體進行釋放。解除引用的最佳手段是将對象變量置為null。

這裡,對象object1被建立然後使用,最後設定為null。當記憶體中的對象不再被引用後,垃圾收集器會把那塊記憶體挪作它用(在那些使用幾百萬對象的巨型程式裡,對象引用解除尤其重要)。

1.3.3 添加删除屬性**

在javascript中,對象另一個有趣的方面是你可以随時添加和删除其屬性。例如,

這裡,object1上增加了mycustomproperty屬性,值為“awesome!”。該屬性也可以被object2通路,因為object1和object2指向同一個對象。

注意:

本例示範了javascript的一個獨特的方面:可以随時修改對象,即使并沒有在開始時定義它們。同時,你将會在本書後續内容中看到還存在很多方法阻止此類修改。

除了通用對象引用類型以外,javascript還有其他一些内建類型任你使用。

繼續閱讀