前一章簡要談及對象的使用,現在要詳細介紹它們了。對象的建立或銷毀都在JavaScript執行過程中發生,理解這種範式的含義對理解整個語言至關重要。3.2.1 聲明和執行個體化對象是用關鍵字new後跟要執行個體化的類的名字建立的:第一行代碼建立了Object類的一個執行個體,並把它儲存在變數oObject中。第二行代碼建立了String類的一個執行個體,把它儲存在變數oStringObject中。如果建構函式無參數,括弧則不是必需的,因此可以採用下面的形式重寫上面的兩行代碼:3.2.2 對象引用在第2章中,介紹了參考型別的概念。在ECMAScript中,不能訪問對象的物理表示,只能訪問對象的引用。每次建立對象,儲存在變數中的都是該對象的引用,而不是對象本身。3.2.3 對象廢除ECMAScript有無用儲存單元收集程式,意味著不必專門銷毀對象來釋放記憶體。當再沒有對對象的引用時,稱該對象被廢除(dereference)了。運行無用儲存單元收集程式時,所有廢除的對象都被銷毀。每當函數執行完它的代碼,無用儲存單元收集程式都會運行,釋放所有的局部變數,還有在一些其他不可預知的情況下,無用儲存單元收集程式也會運行。把對象的所有引用都設定為null,可以強制性的廢除對象。例如:當變數oObject設定為null後,對第一個建立的對象的引用就不存在了。這意味著下次運行無用儲存單元收集程式時,該對象將被銷毀。每用完一個對象後,就將其廢除,來釋放記憶體,這是個好習慣。這樣還確保不再使用已經不能訪問的對象,從而防止程式設計錯誤的出現。此外,舊的瀏覽器(如IE/Mac)沒有全面的無用儲存單元回收程式,所以在卸載頁面時,對象可能不能被正確銷毀。廢除對象和它的所有特性是確保記憶體使用量正確的最好方法。廢除對象的所有引用時要當心。如果一個對象有兩個或更多引用,則要正確廢除該對象,必須將其所有引用都設定為
null。3.2.4 早綁定和晚綁定所謂綁定(binding),即把對象的介面與對象執行個體結合在一起的方法。早綁定(early binding)是指在執行個體化對象之前定義它的特性和方法,這樣編譯器或解釋程式就能提前轉換機器代碼。在Java和Visual Basic這樣的語言中,有了早綁定,就可以在開發環境中使用IntelliSense(即給開發人員提供其對象中特性和方法列表的功能)。ECMAScript不是強型別語言,所以不支援早綁定。另一方面,晚綁定(late binding)指的是編譯器或解釋程式在運行前,不知道對象的類型。使用晚綁定,無需檢查對象的類型,只需要檢查對象是否支援特性和方法即可。ECMAScript中的所有變數都採用晚Binder 方法,這樣就允許執行大量的對象操作,而無任何懲罰。