在面向?qū)ο缶幊讨谐贩溃悾╟lass)是對(duì)象(object)的模板,定義了同一組對(duì)象共有的屬性和方法咆瘟。
Javascript語(yǔ)言不支持“類”嚼隘, 但是可以用一些變通的方法,模擬出“類”袒餐。
一飞蛹、構(gòu)造函數(shù)法
經(jīng)典的方法,書上也是這樣教的灸眼。它用構(gòu)造函數(shù)模擬類卧檐,在內(nèi)部用this關(guān)鍵字指代實(shí)例對(duì)象。
生成實(shí)例的時(shí)候焰宣,使用new關(guān)鍵字霉囚。
類的屬性和方法,還可以定義在構(gòu)造函數(shù)的prototype對(duì)象之上匕积。(具體什么是prototype, 后面找機(jī)會(huì)再研究吧)
二盈罐、Object.create() 方法
為了解決生成對(duì)象麻煩榜跌,Javascript國(guó)際標(biāo)準(zhǔn)提出一個(gè)新的方法Object.create()。用這個(gè)方法盅粪,“類”就是一個(gè)對(duì)象钓葫,不是函數(shù)。
然后直接用Object.create()生成實(shí)例湾揽,不需要用到new瓤逼。
目前,各大瀏覽器的最新版本(包括IE9)都部署了這個(gè)方法库物。如果遇到老式瀏覽器霸旗,可以用下面的代碼自行部署。
這種方法比"構(gòu)造函數(shù)法"簡(jiǎn)單戚揭,但是不能實(shí)現(xiàn)私有屬性和私有方法诱告,實(shí)例對(duì)象之間也不能共享數(shù)據(jù),對(duì)"類"的模擬不夠全面民晒。
三精居、極簡(jiǎn)主義
"極簡(jiǎn)主義法"(minimalist approach)
1、封裝
這種方法不使用this和prototype潜必,代碼部署起來(lái)非常簡(jiǎn)單靴姿,這大概也是它被叫做"極簡(jiǎn)主義法"的原因。 首先磁滚,它也是用一個(gè)對(duì)象模擬"類"佛吓。在這個(gè)類里面,定義一個(gè)構(gòu)造函數(shù)createNew()垂攘,用來(lái)生成實(shí)例维雇。
然后,在createNew()里面晒他,定義一個(gè)實(shí)例對(duì)象吱型,把這個(gè)實(shí)例對(duì)象作為返回值。
使用的時(shí)候陨仅,調(diào)用createNew()方法津滞,就可以得到實(shí)例對(duì)象。
這種方法的好處是灼伤,容易理解据沈,結(jié)構(gòu)清晰優(yōu)雅,符合傳統(tǒng)的"面向?qū)ο缶幊?的構(gòu)造饺蔑,因此可以方便地部署下面的特性。
2嗜诀、繼承
讓一個(gè)類繼承另一個(gè)類猾警,實(shí)現(xiàn)起來(lái)很方便孔祸。只要在前者的createNew()方法中,調(diào)用后者的createNew()方法即可发皿。 先定義一個(gè)Animal類崔慧。
然后,在Dog的createNew()方法中穴墅,調(diào)用Animal的createNew()方法惶室。
這樣得到的Cat實(shí)例,就會(huì)同時(shí)繼承Cat類和Animal類玄货。
3皇钞、私有屬性和私有方法
在createNew()方法中,只要不是定義在dog對(duì)象上的方法和屬性松捉,都是私有的夹界。
上例的內(nèi)部變量sound,外部無(wú)法讀取隘世,只有通過(guò)dog的公有方法makeSound()來(lái)讀取可柿。
4、數(shù)據(jù)共享
有時(shí)候丙者,我們需要所有實(shí)例對(duì)象复斥,能夠讀寫同一項(xiàng)內(nèi)部數(shù)據(jù)。這個(gè)時(shí)候械媒,只要把這個(gè)內(nèi)部數(shù)據(jù)目锭,封裝在類對(duì)象的里面、createNew()方法的外面即可滥沫。
然后侣集,生成兩個(gè)實(shí)例對(duì)象
這時(shí),如果有一個(gè)實(shí)例對(duì)象兰绣,修改了共享的數(shù)據(jù)世分,另一個(gè)實(shí)例對(duì)象也會(huì)受到影響。