來自:http://www.yurendu.com/183.htmlhtml
摘自:李戰《悟透JavaScript》程序員
object就是對象的類型。在JavaScript中無論多麼複雜的數據和代碼,均可以組織成object形式的對象。編程
但JavaScript卻沒有 「類」的概念!編程語言
對於許多面向對象的程序員來講,這恐怕是JavaScript中最難以理解的地方。是啊,幾乎任何講面向對象的書中,第一個要講的就是「類」的概念,這但是面向對象的支柱。這忽然沒有了「類」,咱們就象一會兒沒了精神支柱,感到魂飛魄散。看來,要放下對象和類,達到「對象本無根,類型亦無形」的境界確實是件不容易的事情啊。ide
這樣,咱們先來看一段JavaScript程序:this
var life = {}; for(life.age = 1; life.age <= 3; life.age++) { switch(life.age) { case 1: life.body = "卵細胞"; 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程序一開始產生了一個生命對象life,life誕生時只是一個光溜溜的對象,沒有任何屬性和方法。在第一次生命過程當中,它有了一個身體屬性body,並有了一個say方法,看起來是一個「卵細胞」。在第二次生命過程當中,它又長出了「尾巴」和「腮」,有了tail和gill屬性,顯然它是一個「蝌蚪」。在第三次生命過程當中,它的tail和gill屬性消失了,但又長出了「四條腿」和「肺」,有了legs和lung屬性,從而最終變成了「青蛙」。若是,你的想像力豐富的話,或許還能讓它變成英俊的「王子」,娶個美麗的「公主」什麼的。不過,在看完這段程序以後,請你思考一個問題:咱們必定須要類嗎?spa
還記得兒時那個「小蝌蚪找媽媽」的童話嗎?也許就在昨天晚,你的孩子恰好是在這個美麗的童話中進入夢鄉的吧。可愛的小蝌蚪也就是在其自身類型不斷演化過程當中,逐漸變成了和媽媽同樣的「類」,從而找到了本身的媽媽。這個童話故事中蘊含的編程哲理就是:對象的「類」是從無到有,又不斷演化,最終又消失於無形之中的...orm
「類」,的確能夠幫助咱們理解複雜的現實世界,這紛亂的現實世界也的確須要進行分類。但若是咱們的思想被「類」束縛住了,「類」也就變成了「累」。想象一下,若是一個生命對象開始的時就被規定了固定的「類」,那麼它還能演化嗎?蝌蚪還能變成青蛙嗎?還能夠給孩子們講小蝌蚪找媽媽的故事嗎?htm
因此,JavaScript中沒有「類」,類已化於無形,與對象融爲一體。正是因爲放下了「類」這個概念,JavaScript的對象纔有了其餘編程語言所沒有的活力。對象
若是,此時你的心裏深處開始有所感悟,那麼你已經逐漸開始理解JavaScript的禪機了。