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