怎樣用Javascript定義一個(gè)類
其實(shí)Javascript中沒有類這個(gè)定義,但是有類這個(gè)概念。很多人都寫過這樣的代碼,對,沒錯(cuò),就是如下代碼,清晰的不能再清晰了,就是一個(gè)關(guān)鍵字 function,然后定義一個(gè)方法名,方法名后緊跟一對括號。如果你在項(xiàng)目中寫過這樣的代碼,那么祝賀你,你可以不費(fèi)任何吹毛之力,就能一口氣讀完這篇博文了。
- function Print() {
- ……
- }
當(dāng)我們在寫c#代碼,焦頭爛額,無從下手的時(shí)候,至少我們還是可以厚著臉皮在老板的面前,敲出華麗的 class ***{},是的,沒錯(cuò),就這幾個(gè)字符。殊不知這這幾個(gè)字符體現(xiàn)出來的境界。說淺些,我會(huì)敲鍵盤寫代碼,說深些,我有可能理解了面向?qū)ο蟮木幊蹋辽傥視?huì)定義一個(gè)類。是這樣的,c#中定義一個(gè)類是用class。
有一天,老板變態(tài)了,讓我用Javascript來定義一個(gè)類,我無從下手呀,我平時(shí)都是用$("."),$("#")的人物呀,思考良久,我還模糊的記的document.getElementById("")這個(gè)東西,但是好像與Javascript的類扯不上關(guān)系呀。怎么辦?問了google問百度啊,***在一個(gè)角落,找到了定義Javascript類的E文。仔細(xì)一閱,難道這是一個(gè)坑嗎?明明用function定義了一個(gè)方法,活生生的把它說成一個(gè)類,反復(fù)幾次Google百度后,有點(diǎn)懷疑了,難道Javascript中定義一個(gè)類,真的是用function?其實(shí)沒錯(cuò),在Javascript中,定義一個(gè)類是用fucntion() ***{}。不管是在學(xué)校的菜鳥,還是國外的***程序員,在這件事上是平等的,想定義一個(gè)Javascript的類,就必須得先敲下function ***(){}。
在定義Javascript類上,表現(xiàn)形勢上大家雖然是平等的,都是用function ***(){}。但實(shí)質(zhì)上,確是蘊(yùn)含著大量的學(xué)問。也許有些朋友到目前為止,是不是感覺我說的太簡單了,那我們就在這個(gè)function上玩點(diǎn)花樣。
- function Dog(category, name, age) {
- this.Category = category;
- this.Name = name;
- this.Age = age;
- }
一個(gè)Javascript類就這樣定義完成了,現(xiàn)在就可以自豪的說,我會(huì)面向?qū)ο蟮氖址ň幎↗avascript代碼了。
類定義好了,那我們怎么樣來用這個(gè)類呢?其實(shí)用法和C#的用法很像。
- var dog01 = new Dog("狗類", "土狗", 2);
- var dog02 = new Dog("狗類", "黃狗", 5);
有些朋友要拍磚了,這么簡單的東西,都拿出來說,那我們不妨再來進(jìn)階一下。我上邊的代碼,實(shí)例化了兩個(gè)對象,一個(gè)是dog01,dog01下邊那個(gè)是dog02。因?yàn)閐og01的Cateogry太口語化了,我要修改為dog01.Categry = '犬類',這樣聽起來是不是舒服多了,這是一個(gè)很簡單的事,我們僅僅需要為dog01的Cateogry重賦值就可以了。我們修改了dog01的Cateory, dog02的Category會(huì)跟著變嗎?答案是肯定的,不會(huì)變,如果有變,肯定有鬼。那我們有沒有方法讓dog01,dog02這些對象的Cateogry屬性共用起來呢?也就是說當(dāng)我修改了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);
當(dāng)我們修改Dog.prototype.Category的時(shí)候,dog01,dog02的屬性都跟著神奇的變了。是不是有點(diǎn)類似于C#中的static。
當(dāng)你已經(jīng)耐心的看到這兒的時(shí)候,我相信對朝九晚五的寫$("."),$("#")的朋友指明了一個(gè)方向。如果我寫的這些你已經(jīng)知道了,你可以去看看阮一峰寫的 Javascript定義類的幾種方法:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html
原文鏈接:http://www.cnblogs.com/xcj26/archive/2013/04/08/3006023.html