一直都在用JavaScript完成一些客戶端的功能,每次應(yīng)用都是到網(wǎng)上現(xiàn)查現(xiàn)用,卻從來沒有系統(tǒng)的學(xué)習(xí)一下JavaScript。 有一次企圖偷窺一下它的內(nèi)涵,發(fā)現(xiàn)身邊一個(gè)朋友正捧著一本JavaScript的書在看,忘記叫什么名字了,只記得比《thinking in java》還要厚,當(dāng)時(shí)就放棄了偷窺的念頭。 昨天在看關(guān)于AJAX的一本書時(shí),正好很大的一部分篇幅是講JavaScript的。讀了讀,感覺JavaScript真的好強(qiáng)大。同樣是一種面向?qū)ο蟮恼Z言,學(xué)習(xí)起來有很多和JAVA很相似的地方。 JavaScript中的"類" 在面向?qū)ο蟮乃枷胫校詈诵牡母拍钪痪褪穷悺?一個(gè)類表示了具有相似性質(zhì)的一類事物的抽象,通過實(shí)例化一個(gè)類,可以獲得屬于該類的一個(gè)實(shí)例,即對(duì)象。 在JavaScript中,最常見的代碼如下:
我們叫funcName為一個(gè)函數(shù),其實(shí)funcName也可以理解成一個(gè)類,甚至也可以理解成一個(gè)對(duì)象。 認(rèn)識(shí)function 我們都知道可以用function關(guān)鍵字定義一個(gè)函數(shù),并為每一個(gè)函數(shù)指定一個(gè)函數(shù)名,通過函數(shù)名來進(jìn)行調(diào)用。在JavaScript解釋執(zhí)行時(shí),函數(shù)都是被維護(hù)為一個(gè)對(duì)象,這就是函數(shù)對(duì)象。 函數(shù)對(duì)象和其它用戶自定義的對(duì)象有著本質(zhì)的區(qū)別,它和日期對(duì)象(Date),數(shù)組對(duì)象(Array)等一樣,都屬于內(nèi)部對(duì)象。這些對(duì)象的構(gòu)造器是有JavaScript本身定義的:通過執(zhí)行new Date()這樣的語句返回一個(gè)對(duì)象。 函數(shù)對(duì)象對(duì)應(yīng)的類型是function,同日期對(duì)象對(duì)應(yīng)的類型是Date一樣,可以通過new function()來創(chuàng)建一個(gè)函數(shù)對(duì)象,也可以通過function關(guān)鍵字來創(chuàng)建一個(gè)對(duì)象。如:
prototype原型對(duì)象 prototype是一個(gè)對(duì)象。 prototype對(duì)象是實(shí)現(xiàn)面向?qū)ο蟮囊粋€(gè)重要機(jī)制,所以特別記錄一下。 由上面可以看出,每個(gè)函數(shù)其實(shí)也是一個(gè)對(duì)象,它們對(duì)應(yīng)的類是“function”。這里,JavaScript同Java不同,就是,每一個(gè)函數(shù)對(duì)象都有一個(gè)子對(duì)象prototype。prototype對(duì)象表示該函數(shù)的原型,把函數(shù)理解成類,也就是說,prototype表示了一個(gè)類的組成。 當(dāng)通過new來獲取一個(gè)類的對(duì)象的時(shí)候,prototype對(duì)象的成員都會(huì)成為實(shí)例化對(duì)象的成員。如:
類的實(shí)現(xiàn)
這樣更像傳統(tǒng)意義面向?qū)ο笳Z言中類的實(shí)現(xiàn),只是構(gòu)造函數(shù)和類的定義被分成了兩個(gè)部分。 實(shí)現(xiàn)private,static private: 前面的例子都屬于共有成員,也就是說,向任何實(shí)例公開這些屬性和方法。 JavaScript中沒有特殊的機(jī)制來定義私有成員,但可以通過變量的作用域來實(shí)現(xiàn)。
static:
靜態(tài)成員也是一個(gè)類的成員。 因?yàn)楹瘮?shù)也是一個(gè)對(duì)象,所以可以用給函數(shù)對(duì)象直接添加成員的方法來實(shí)現(xiàn)靜態(tài)成員。
這樣是給每個(gè)函數(shù)對(duì)象都添加通用的靜態(tài)方法。 類的繼承 利用反射機(jī)制和prototype實(shí)現(xiàn)繼承 為了方便,可以先為每一個(gè)類添加一個(gè)共有的方法,用以實(shí)現(xiàn)繼承。
基類
子類
這樣的方法是在犧牲了一定的代碼可讀性為代價(jià)的前提下,實(shí)現(xiàn)了類的繼承。據(jù)說現(xiàn)在javascript的一種框架已經(jīng)更好的實(shí)現(xiàn)了類的繼承機(jī)制,還沒有研究過。呵呵。
function是所有函數(shù)對(duì)象的基礎(chǔ),Object是所有對(duì)象(包括函數(shù)對(duì)象)的基礎(chǔ)。 感覺,所有面向?qū)ο笳Z言的設(shè)計(jì)思想都是一致的。簡(jiǎn)單說就是以對(duì)象為基礎(chǔ)。JavaScript作為一種面向?qū)ο蟮恼Z言,同樣是以對(duì)象為基礎(chǔ)的。 理解JavaScript面向?qū)ο蟮乃枷耄瑢?duì)我以后學(xué)習(xí)JavaScript的一些高級(jí)技術(shù)會(huì)有很大幫助。 故,記錄筆記于此。
歡迎來訪!^.^! 本BLOG僅用于個(gè)人學(xué)習(xí)交流! 目的在于記錄個(gè)人成長(zhǎng). 所有文字均屬于個(gè)人理解. 如有錯(cuò)誤,望多多指教!不勝感激!
Copyright © 久城