JavaScript 物件導向的寫法

基本範例

這邊的範例來自 Professional JavaScript for Web Developers

Factory Paradigm

下面的寫法讓你做出一個 oCar 的物件。但可能你需要的產生很多 Car 物件,這種方式只能一個個寫...

那麼我們來做個簡單的包裝吧~

這樣是有一點物件導向的味道了,但是我們如果不用 new 這個關鍵字,感覺缺乏了 Semantic 的意義。

Constructor paradigm

如前述的問題,我們改寫一下,讓 Car 函式成為一個建構式,可以很方便地用一個 new 的關鍵字製造出許多的 Objects

Hybrid Constructor / Prototype Paradigm

上述的寫法是目前最容易看到的寫法之一。但是有些人會考量到效能面,如 showColor() 這個方法,每次 instantiate 時,裡面所有的屬性與方法都會被複製一份。其實我們可以讓這個方法只產生一次、而且被共用。

雖然這樣的效能比較好,但我個人是比較喜歡包裝在一個 constructor 內,在撰寫期間比較容易觀看。

Prototype paradigm

眼尖的人會看到 Hybrid 這個字,所以我還是介紹一下 Prototype 的寫法

這種寫法有一個很討厭的缺點,就是沒辦法利用參數設定屬性。必須在 Instantiate 物件後再 Assign。我是從來沒用過這個寫法!

JSON

Object Literal

剛剛我們看到了以 Function 當做是一個 Class 類別,以這個 Class 類別作基底,產生 ( Instantiate ) 出一個個的物件 ( Instances )。其實對於物件,我們可以有著更多好玩的寫法。

這邊的 oYAHOO 經過宣告後就是一個獨立的物件

裡面的任何一個屬性,我們都可以用 dot notation 的方式來做存取,如 oYAHOO.bu 會取得陣列, oYAHOO.employee[0].name 會取得字串 ('aaron'), oYAHOO.enemy 會得到空值 (null), oYAHOO.employee_total 會得到整數, oYAHOO.next_action 會得到一個 function

另外你也可以透過如陣列索引的方式存取 oYAHOO[0] 會與 oYAHOO.bu 相同

這樣的格式,就是我們所稱的 JSON (JavaScript Object Notation),目前看起來似乎是儲存資料用的比較多,但其實它也可以被拿來當作是一種我們物件導向程式的寫法喔!稍後再提!

建議的寫法

現狀

目前連 dot com 的寫法都尚未統一,我只能就看過的幾種寫法提一些建議

單純的 Constructor 寫法

我目前就是採用這種方式,沒有跟 Prototype 或 Factory 混合使用。

最近花了一點時間在玩 Flickr 的 Open API,因為使用方式其實還蠻複雜的,所以我就整理成單獨一個 Js Libray 以方便後續程式的製作,在這邊當成範例。

撰寫完我們所需要的物件後,接下來當然就是要拿來用了!

Dustin Diaz's Style

最近還看到一種不錯的寫法,但是還沒有機會實做 ( 線上 LightBox 的範例 )

這個範例不算是新增一個物件、他只是一個普通的 function,但是我們可以利用同樣的方法去寫出一個物件來,好處是他把 Public 與 Private 區分得很清楚,利用 dot notation 的方式執行,效能可能也會比較快。

觀察 JS OO Performance

http://www.hedgerwow.com/360/dhtml/js_performance_1.html

回家功課:Toggle

http://localhost/phpweb/Joshua/class/chapter13/Toggle.html

JS OO Editor : APTANA

http://www.hedgerwow.com/360/doc/aptana-how-to/demo.html