首頁  >  文章  >  web前端  >  Javascript中關於類別的創建以及物件的詳解

Javascript中關於類別的創建以及物件的詳解

黄舟
黄舟原創
2017-05-31 10:05:041088瀏覽

使用Javascript建立類別和物件的方法有很多,現在就來列舉:1、原始的創建方法,2、工廠方法模式,3、建構方法模式,4、動態原型方法。下面我們就來透過實例詳細看下

現總結一下Javascript創建類別和物件的幾個方法:

1、原始的創建方法:

<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>

原始的創建方法對於熟悉物件導向的人來說難以接受,總感覺屬性和方法的封裝不是很緊密,這種封裝是以「物件名稱」+「.」的方式進行,表示物件名稱後面的屬性和方法是這個物件擁有的東西,這個物件(例如:person)就是封裝好的結果,你可以繼續追加方法和屬性,例如追加age屬性:person.age=23;這種創建方法會讓熟悉Java程式的人感到很難受。我們可以對原始的創建方法進一步「封裝」一下,請看下一步:

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對原始的創建方法進行了封裝,並將創建好的物件回傳給person引用變數,person就可以引用這個創建好的物件了,但是還不夠完美:你每一次建立一個物件, 並使用該物件呼叫show()方法時,都會建立新的show()函數,它們完全可以呼叫同一個show方法,最佳化方法是將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>

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

3、建構方法模式:

 <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>

上述程式碼的建立方式已經與Java類別和物件的建立方式幾乎一樣了,封裝好類別的屬性和方法,然後利用new關鍵字創建並返回一個對象,這不就是Java創建類別和對象的過程嗎,是的,就是這個過程,但是還可以優化,這種方式創建的對象調用show方法是也會即時地創建一個show函數,我們能不能建立一個所有物件公用的一個方法呢?就像Java類別中的static方法一樣,所有物件都使用同一個static方法,答案是可以的。請看下一步:

4、動態原型方法:

 <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>

這裡使用了一點技巧,當用new建立物件是,會執行Person功能區塊中的if判斷語句,順序從上往下,剛開始tag變數當然沒有定義,所以執行if語句區塊裡的內容:

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

這段內容的意思是建立一個屬於類Person的show方法,注意,它是一個類別方法,相當於Java中static修飾後的方法,而非單一物件的方法,這樣所有的物件都可以調用同一個方法了,這樣也不用每次不同物件調用方法是都創建自己的show函數了,既節省空間又節省時間,這種方法豈不更妙。這裡解釋一下,以「類別名稱.prototype.屬性/方法」方式建構的屬性和方法相當於Java中用static修飾的變數或方法,是屬於整個類別的,而非單一的對象,也也就是所有物件是共享的。

以上是Javascript中關於類別的創建以及物件的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn