国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript創(chuàng)建類和對象詳解

2019-11-19 16:27:35
字體:
供稿:網(wǎng)友

現(xiàn)總結(jié)一下Javascript創(chuàng)建類和對象的幾種方法:

1、原始的創(chuàng)建方法:

<script type="text/javascript">  var person = new Object();  person.name="Amy";  person.sex="Woman";  person.show=function(){    document.write("name is: "+this.name+" ; sex is:"+this.sex);  }  person.show(); </script>

原始的創(chuàng)建方法對于熟悉面向?qū)ο蟮娜藖碚f難以接受,總感覺屬性和方法的封裝不是很緊密,這種封裝是以“對象名”+“.”的方式進行,表示對象名后跟的屬性和方法是這個對象擁有的東西,這個對象(例如:person)就是封裝好的結(jié)果,你可以繼續(xù)追加方法和屬性,例如追加age屬性:person.age=23;這種創(chuàng)建方法會讓熟悉Java編程的人感到很難受。我們可以對原始的創(chuàng)建方法進一步“封裝”一下,請看下一步:

2、工廠方法模式:

 <script type="text/javascript">   function personFactory(name,age,sex){     var ob=new Object();     ob.name=name;     ob.age=age;     ob.sex=sex;     ob.show=function(){       document.write(ob.name+" "+ob.age+" "+ob.sex);     }     return ob;   }   var person=personFactory("Amy",21,"Woman");   person.show(); </script>

工廠方法模式看起來更像一個類了,personFactory對原始的創(chuàng)建方法進行了封裝,并將創(chuàng)建好的對象返回給person引用變量,person就可以引用這個創(chuàng)建好的對象了,但是還不夠完美:你每一次創(chuàng)建一個對象, 并使用該對象調(diào)用show()方法時,都會創(chuàng)建新的show()函數(shù),它們完全可以調(diào)用同一個show方法,優(yōu)化方法是將show放到工廠外,如下:

 <script type="text/javascript">   function show(){     document.write(this.name+" "+this.age+" "+this.sex);   }   function personFactory(name,age,sex){     var ob=new Object();     ob.name=name;     ob.age=age;     ob.sex=sex;     ob.show=show;     return ob;   }   var person=personFactory("Amy",22,"Woman");   person.show(); </script>

從功能上說,上面的代碼解決了函數(shù)重用問題,但是呈現(xiàn)方式不像是創(chuàng)建一個對象,熟悉Java的人仍感到難受。請看下一步:

3、構(gòu)造方法模式:

 <script type="text/javascript">   function person(name,age,sex){     this.name=name;     this.age=age;     this.sex=sex;     this.show=function(){       document.write(this.name+" "+this.age+" "+this.sex);       document.write("<br>");     }   }   var per=new person("Amy",22,"Woman");   per.show(); </script>

上述代碼的創(chuàng)建方式已經(jīng)與Java類和對象的創(chuàng)建方式幾乎一樣了,封裝好類的屬性和方法,然后利用new關(guān)鍵字創(chuàng)建并返回一個對象,這不就是Java創(chuàng)建類和對象的過程嗎,是的,就是這個過程,但是還可以優(yōu)化,這種方式創(chuàng)建的對象調(diào)用show方法是也會即時地創(chuàng)建一個show函數(shù),我們能不能創(chuàng)建一個所有對象公用的一個方法呢?就像Java類中的static方法一樣,所有對象都使用同一個static方法,答案是可以的。請看下一步:

4、動態(tài)原型方法:

 <script type="text/javascript">   function Person(name,age,sex){     this.name=name;     this.age=age;     this.sex=sex;     if(typeof Person.tag == "undefined"){       Person.prototype.show=function(){         document.write(this.name+" "+this.age+" "+this.sex);         document.write("<br>");       }       Person.tag=true;     }   }   var per=new Person("Peter",22,"Man");   per.show(); </script>

這里使用了一點技巧,當(dāng)用new創(chuàng)建對象是,會執(zhí)行Person功能塊中的if判斷語句,順序從上往下,剛開始tag變量當(dāng)然沒有定義,所以執(zhí)行if語句塊里的內(nèi)容:

Person.prototype.show=function(){ document.write(this.name+" "+this.age+" "+this.sex); document.write("<br>"); }

這段內(nèi)容的含義是創(chuàng)建一個屬于類Person的show方法,注意,它是一個類方法,相當(dāng)于Java中static修飾后的方法,而非單個對象的方法,這樣所有的對象均可調(diào)用同一個方法了,這樣也不用每次不同對象調(diào)用方法是都創(chuàng)建自己的show函數(shù)了,既節(jié)省空間又節(jié)省時間,這種方法豈不更妙。這里解釋一下,以“類名.prototype.屬性/方法”方式構(gòu)造的屬性和方法相當(dāng)于Java中用static修飾的變量或方法,是屬于整個類的,而非單個的對象,也即所有對象是共享的。

以上是學(xué)習(xí)JS類和對象的總結(jié),其中個人理解錯誤之處還望大家批評指正。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 綦江县| 九台市| 铅山县| 江口县| 安泽县| 凤山县| 香格里拉县| 弥勒县| 昌江| 南京市| 临高县| 上饶县| 香格里拉县| 通山县| 甘洛县| 黄平县| 格尔木市| 长岛县| 东方市| 衢州市| 靖安县| 高密市| 棋牌| 遵化市| 山阳县| 南靖县| 浙江省| 攀枝花市| 苏尼特左旗| 黑龙江省| 家居| 临朐县| 安溪县| 临沂市| 高州市| 重庆市| SHOW| 宾阳县| 东兴市| 河北省| 平塘县|