沒有類
object就是對(duì)象的類型。在JavaScript中不管多么復(fù)雜的數(shù)據(jù)和代碼,都可以組織成object形式的對(duì)象。
但JavaScript卻沒有 “類”的概念!對(duì)于許多面向?qū)ο蟮某绦騿T來說,這恐怕是JavaScript中最難以理解的地方。是啊,幾乎任何講面向?qū)ο蟮臅校谝粋(gè)要講的就是“類”的概念,這可是面向?qū)ο蟮闹е_@突然沒有了“類”,我們就象一下子沒了精神支柱,感到六神無主?磥,要放下對(duì)象和類,達(dá)到“對(duì)象本無根,類型亦無形”的境界確實(shí)是件不容易的事情啊。
這樣,我們先來看一段JavaScript程序:
var life = {}; for(life.age = 1; life.age <= 3; life.age++) { switch(life.age) { case 1: life.body = "卵細(xì)胞"; life.say = function(){alert(this.age+this.body)}; break; case 2: life.tail = "尾巴"; life.gill = "腮"; life.body = "蝌蚪"; life.say = function(){alert(this.age+this.body+"-"+this.tail+","+this.gill)}; break; case 3: delete life.tail; delete life.gill; life.legs = "四條腿"; life.lung = "肺"; life.body = "青蛙"; life.say = function(){alert(this.age+this.body+"-"+this.legs+","+this.lung)}; break; }; life.say(); };
這段JavaScript程序一開始產(chǎn)生了一個(gè)生命對(duì)象life,life誕生時(shí)只是一個(gè)光溜溜的對(duì)象,沒有任何屬性和方法。在第一次生命過程中,它有了一個(gè)身體屬性body,并有了一個(gè)say方法,看起來是一個(gè)“卵細(xì)胞”。在第二次生命過程中,它又長出了“尾巴”和“腮”,有了tail和gill屬性,顯然它是一個(gè)“蝌蚪”。在第三次生命過程中,它的tail和gill屬性消失了,但又長出了“四條腿”和“肺”,有了legs和lung屬性,從而最終變成了“青蛙”。如果,你的想像力豐富的話,或許還能讓它變成英俊的“王子”,娶個(gè)美麗的“公主”什么的。不過,在看完這段程序之后,請(qǐng)你思考一個(gè)問題:
我們一定需要類嗎?
還記得兒時(shí)那個(gè)“小蝌蚪找媽媽”的童話嗎?也許就在昨天晚,你的孩子剛好是在這個(gè)美麗的童話中進(jìn)入夢(mèng)鄉(xiāng)的吧。可愛的小蝌蚪也就是在其自身類型不斷演化過程中,逐漸變成了和媽媽一樣的“類”,從而找到了自己的媽媽。這個(gè)童話故事中蘊(yùn)含的編程哲理就是:對(duì)象的“類”是從無到有,又不斷演化,最終又消失于無形之中的...
“類”,的確可以幫助我們理解復(fù)雜的現(xiàn)實(shí)世界,這紛亂的現(xiàn)實(shí)世界也的確需要進(jìn)行分類。但如果我們的思想被“類”束縛住了,“類”也就變成了“累”。想象一下,如果一個(gè)生命對(duì)象開始的時(shí)就被規(guī)定了固定的“類”,那么它還能演化嗎?蝌蚪還能變成青蛙嗎?還可以給孩子們講小蝌蚪找媽媽的故事嗎?
所以,JavaScript中沒有“類”,類已化于無形,與對(duì)象融為一體。正是由于放下了“類”這個(gè)概念,JavaScript的對(duì)象才有了其他編程語言所沒有的活力。
如果,此時(shí)你的內(nèi)心深處開始有所感悟,那么你已經(jīng)逐漸開始理解JavaScript的禪機(jī)了。
出處:軟件真諦
責(zé)任編輯:moby
上一頁 回到簡單 下一頁 函數(shù)的魔力
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|