javascript—類的構建)

來源:互聯網
上載者:User
javascript---類的構建

關鍵字: javascript---類的構建

javascript裡構建類主要有4種方式
1.構造方式定義類
2.原型方式定義類
3.構造和原型結合方式建立類
4.動態原型方式

各有優缺點,具體如下
1.構造方式定義類,優點:多個執行個體對象不共用類的屬性值,缺點:每個執行個體對象都會產生出一個函數say

Java代碼
  1. //構造方式定義類,優點:多個執行個體對象不共用類的屬性值,缺點:每個執行個體對象都會產生出一個函數say   
  2. function User(){   
  3.     this.username = "zhangsan";//this.不能丟   
  4.        
  5.     this.say = function(){//this.不能丟   
  6.         alert("username:" + this.username );//this.不能丟   
  7.     }   
  8.     //下面注釋的這種寫法不對   
  9. //  function say(){   
  10. //      alert("username:" + this.username );   
  11. //  }   
  12. }   
  13.   
  14. var user = new User();   
  15. user.username = "lisi";   
  16. user.say();//username:lisi   
  17.   
  18. var user1 = new User();   
  19. user1.say();//username:zhangsan,不受user對象的影響  
//構造方式定義類,優點:多個執行個體對象不共用類的屬性值,缺點:每個執行個體對象都會產生出一個函數sayfunction User(){this.username = "zhangsan";//this.不能丟this.say = function(){//this.不能丟alert("username:" + this.username );//this.不能丟}//下面注釋的這種寫法不對//function say(){//alert("username:" + this.username );//}}var user = new User();user.username = "lisi";user.say();//username:lisivar user1 = new User();user1.say();//username:zhangsan,不受user對象的影響

//多個執行個體對象不共用類的屬性值: Java代碼

  1. //多個執行個體對象不共用類的屬性值,如下:   
  2. function User(){   
  3.     this.username = new Array();//this.不能丟   
  4.        
  5.     this.say = function(){//this.不能丟   
  6.         alert("username:" + this.username );//this.不能丟   
  7.     }   
  8. }   
  9.   
  10. var user = new User();   
  11. user.username.push("zhangsan");   
  12. user.say();//username:zhangsan   
  13.   
  14. var user1 = new User();   
  15. user1.say();//user1的username為空白,不為zhangsan,因為user1的屬性值不受user影響  
//多個執行個體對象不共用類的屬性值,如下:function User(){this.username = new Array();//this.不能丟this.say = function(){//this.不能丟alert("username:" + this.username );//this.不能丟}}var user = new User();user.username.push("zhangsan");user.say();//username:zhangsanvar user1 = new User();user1.say();//user1的username為空白,不為zhangsan,因為user1的屬性值不受user影響

2.原型方式定義類,缺點:類的屬性值如果是參考型別的(非Number和String類型),則多個執行個體對象共用 Java代碼

  1. //原型方式定義類,缺點:類的屬性值如果是參考型別的(非Number和String類型),則多個執行個體對象共用   
  2. function User(){   
  3. }   
  4. User.prototype.username = "zhangsan";   
  5. User.prototype.say = function(){   
  6.     alert("username: " + this.username );   
  7. }   
  8.   
  9. var user = new User();   
  10. user.username = "lisi";   
  11. user.say();//username:lisi   
  12.   
  13. var user1 = new User();   
  14. user1.say();//username:zhangsan  
//原型方式定義類,缺點:類的屬性值如果是參考型別的(非Number和String類型),則多個執行個體對象共用function User(){}User.prototype.username = "zhangsan";User.prototype.say = function(){alert("username: " + this.username );}var user = new User();user.username = "lisi";user.say();//username:lisivar user1 = new User();user1.say();//username:zhangsan

類的屬性值如果是參考型別的(非Number和String類型),則多個執行個體對象共用: Java代碼

  1. //類的屬性值如果是參考型別的(非Number和String類型),則多個執行個體對象共用,如下   
  2. function User(){   
  3. }   
  4. User.prototype.username = new Array();   
  5. User.prototype.say = function(){   
  6.     alert("username: " + this.username );   
  7. }   
  8.   
  9. var user = new User();   
  10. user.username.push("zhangsan") ;   
  11. user.say();//username:zhangsan   
  12.   
  13. var user1 = new User();   
  14. user1.say();//username:zhangsan,因為user1屬性也會受到user的影響,user1和user指向同一引用,即共用同一屬性  
//類的屬性值如果是參考型別的(非Number和String類型),則多個執行個體對象共用,如下function User(){}User.prototype.username = new Array();User.prototype.say = function(){alert("username: " + this.username );}var user = new User();user.username.push("zhangsan") ;user.say();//username:zhangsanvar user1 = new User();user1.say();//username:zhangsan,因為user1屬性也會受到user的影響,user1和user指向同一引用,即共用同一屬性

3.構造和原型結合方式建立類:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用;缺點:屬性和方法分開定義不是太好。

Java代碼
  1. //構造和原型結合方式建立類:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用;缺點:屬性和方法分開定義不是太好。   
  2. function User(){   
  3.     this.username = "zhangsan";   
  4. }   
  5. User.prototype.say = function(){   
  6.     alert("username: " + this.username );   
  7. }   
  8. var user = new User();   
  9. alert(user.username);  
//構造和原型結合方式建立類:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用;缺點:屬性和方法分開定義不是太好。function User(){this.username = "zhangsan";}User.prototype.say = function(){alert("username: " + this.username );}var user = new User();alert(user.username);

4.動態原型方式:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用,同時屬性和方法不是分開定義的

Java代碼
  1. ////動態原型方式:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用,同時屬性和方法不是分開定義的   
  2.   
  3. function User(){   
  4.     this.username = "zhangsan";   
  5.        
  6.     if(typeof User.flag == "undefined"){   
  7.         alert("execute...");   
  8.         User.prototype.say = function(){   
  9.             alert("username: " + this.username );   
  10.         }   
  11.            
  12.         User.flag = true;   
  13.     }   
  14. }   
  15.   
  16. var user1 = new User();//execute...   
  17. var user2 = new User();//不會列印出execute...,則說明方法只建立了一次,即方法只會產生一個   
  18. user1.say();//username  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.