怎樣用Javascript定義一個類

來源:互聯網
上載者:User

  其實Javascript中沒有類這個定義,但是有類這個概念。很多人都寫過這樣的代碼,對,沒錯,就是如下代碼,清晰的不能再清晰了,就是一個關鍵字 function,然後定義一個方法名,方法名後緊跟一對括弧。如果你在項目中寫過這樣的代碼,那麼祝賀你,你可以不費任何吹毛之力,就能一口氣讀完這篇博文了.

function Print() {     …… }

  當我們在寫c#代碼,焦頭爛額,無從下手的時候,至少我們還是可以厚著臉皮在老闆的面前,敲出華麗的 class ***{},是的,沒錯,就這幾個字元。殊不知這這幾個字元體現出來的境界。說淺些,我會敲鍵盤寫代碼,說深些,我有可能理解了物件導向的編程,至少我會定義一個類。是這樣的,c#中定義一個類是用class。

     有一天,老闆變態了,讓我用Javascript來定義一個類,我無從下手呀,我平時都是用$("."),$("#")的人物呀,思考良久,我還模糊的記的document.getElementById("")這個東西,但是好像與Javascript的類扯不上關係呀。怎麼辦?問了google問百度啊,最後在一個角落,找到了定義Javascript類的E文。仔細一閱,難道這是一個坑嗎?明明用function定義了一個方法,活生生的把它說成一個類,反覆幾次Google百度後,有點懷疑了,難道Javascript中定義一個類,真的是用function?其實沒錯,在Javascript中,定義一個類是用fucntion() ***{}。不管是在學校的菜鳥,還是國外的頂級程式員,在這件事上是平等的,想定義一個Javascript的類,就必須得先敲下function ***(){}。

  在定義Javascript類上,表現形勢上大家雖然是平等的,都是用function ***(){}。但實質上,確是蘊含著大量的學問。也許有些朋友到目前為止,是不是感覺我說的太簡單了,那我們就在這個function上玩點花樣。

function Dog(category, name, age) {    this.Category = category;    this.Name = name;    this.Age = age;}

  一個Javascript類就這樣定義完成了,現在就可以自豪的說,我會物件導向的手法編定Javascript代碼了。

  類定義好了,那我們怎麼樣來用這個類呢?其實用法和C#的用法很像。

var dog01 = new Dog("狗類", "土狗", 2);var dog02 = new Dog("狗類", "黃狗", 5);

   有些朋友要拍磚了,這麼簡單的東西,都拿出來說,那我們不妨再來進階一下。我上邊的代碼,執行個體化了兩個對象,一個是dog01,dog01下邊那個是dog02。因為dog01的Cateogry太口語化了,我要修改為dog01.Categry = '犬類',這樣聽起來是不是舒服多了,這是一個很簡單的事,我們僅僅需要為dog01的Cateogry重賦值就可以了。我們修改了dog01的Cateory, dog02的Category會跟著變嗎?答案是肯定的,不會變,如果有變,肯定有鬼。那我們有沒有方法讓dog01,dog02這些對象的Cateogry屬性共用起來呢?也就是說當我修改了Category屬性,不管是dog01,還是dog02都跟一樣的變,我們不妨來這樣寫寫。

function Dog(name,age) {    this.Name = "";    this.Age = "";}Dog.prototype.Category = "狗類";var dog01 = new Dog("土狗",2);var dog02 = new Dog("黃狗",5);alert(dog01.Category);alert(dog02.Category);Dog.prototype.Category = "犬類";alert(dog01.Category);alert(dog02.Category);

當我們修改Dog.prototype.Category的時候,dog01,dog02的屬性都跟著神奇的變了。是不是有點類似於C#中的static。

  當你已經耐心的看到這兒的時候,我相信對朝九晚五的寫$("."),$("#")的朋友指明了一個方向。如果我寫的這些你已經知道了,你可以去看看阮一峰寫的 Javascript定義類的幾種方法:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html

http://www.cnblogs.com/v10258/archive/2013/05/20/3065247.html

 

你感覺我寫的比較扯蛋,那別忘記了反對哦,對你有協助呢,那還是給我一點動力,推薦一下哈。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.