JavaScript 沒有類概念

來自: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的禪機了。

相關文章
相關標籤/搜索