JavaScript面向?qū)ο缶幊蹋?)
自從有了Ajax這個概念,JavaScript作為Ajax的利器,其作用一路飆升。JavaScript最基本的使用,以及語法、瀏覽器對象等等東東在這里就不累贅了。把主要篇幅放在如何實現(xiàn)JavaScript的面向?qū)ο缶幊谭矫妗?img alt="" src="http://www.cnblogs.com/Emoticons/msn/wink_smile.gif" />??? 1. 用JavaScript實現(xiàn)類
??? ?? JavaScritpt沒有專門的機制實現(xiàn)類,這里是借助它的函數(shù)允許嵌套的機制來實現(xiàn)類的。一個函數(shù)可以包含變量,又可以包含其它函數(shù),這樣,變量可以作為屬性,內(nèi)部的函數(shù)就可以作為成員方法了。因此外層函數(shù)本身就可以作為一個類了。如下:






??? 2. 如何獲得一個類的實例
????? 實現(xiàn)了類就應(yīng)該可以獲得類的實例,JavaScript提供了一個方法可以獲得對象實例。即 new操作符。其實JavaScript中,類和函數(shù)是同一個概念,當用new操作一個函數(shù)時就返回一個對象。如下:

??? 3. 對象的成員的引用
?????? 在JavaScript中引用一個類的屬性或方法的方法有以下三種。
?????? 1>? 點號操作符
??????????? 這是一種最普遍的引用方式,就不累贅。即如下形式:


????? 2>? 方括號引用
?????????? JavaScript中允許用方括號引用對象的成員。如下:


?????? 另外,使用方括號引用的屬性和方法名還可以以數(shù)字開頭,或者出現(xiàn)空格,而使用點號引用的屬性和方法名則遵循標示符的規(guī)則。但一般不提倡使用非標示符的命名方法。
?
????? 3>? 使用eval函數(shù)
?????????? 如果不希望使用變量傳遞變量或方法名,又不想使用條件判斷,那么eval函數(shù)是一個好的選擇。eval接收一個字符串類型的參數(shù),然后將這個字符串作為代碼在上下文中執(zhí)行,返回執(zhí)行的結(jié)果。這里正是利用了eval的這一功能。如下:

???? 4. 對對象屬性,方法的添加、修改和刪除操作
???????? JavaScript中,在生成對象之后還可以為對象動態(tài)添加、修改和刪除屬性和方法,這與其它面向?qū)ο蟮恼Z言是不同的。
??????? 1>? 添加屬性和方法
????????????? 先創(chuàng)建一個對象,空對象創(chuàng)建后沒有任何屬性和方法,然而我們可以在代碼中創(chuàng)建。












????? 2>? 修改屬性與方法
??????????? 與添加屬性和方法類似,例如接著上面的例子:











????? 3>? 刪除屬性與方法
??????????? 直接將要刪除的屬性或方法賦值為undefined即可:




???? 5. 創(chuàng)建無類型對象。
??????? 類似于C#3.0里的Anonymous Types,JavaScript 也可以創(chuàng)建無類型的對象。形式如下:
















?????? 用這種方式創(chuàng)建屬性方法時,也可以用字符串定義屬性方法的名字。如:







????? 6. prototype
????????? 每個函數(shù)對象都具有一個子對象prototype,因為函數(shù)也可以表示類,所以prototype表示一個類的成員的集合。當new 一個對象時,prototype對象的成員都會被實例化成對象的成員。先看一個例子:



































??????? 由于prototype的初始化發(fā)生在函數(shù)體執(zhí)行之前,用以下代碼可以證明:



















??????? 最后只得一提的是,prototype有一個方法,在面向?qū)ο蟮脑O(shè)計中用得到。即:constructor屬性,是對構(gòu)造函數(shù)的調(diào)用,這里的構(gòu)造函數(shù)即上文提到的類的聲明里的代碼。如:










posted on 2009-12-08 15:39 飛熊 閱讀(228) 評論(0) 編輯 收藏 所屬分類: javaScript