javascript---類的構建
關鍵字: javascript---類的構建
javascript裡構建類主要有4種方式
1.構造方式定義類
2.原型方式定義類
3.構造和原型結合方式建立類
4.動態原型方式
各有優缺點,具體如下
1.構造方式定義類,優點:多個執行個體對象不共用類的屬性值,缺點:每個執行個體對象都會產生出一個函數say
Java代碼
- //構造方式定義類,優點:多個執行個體對象不共用類的屬性值,缺點:每個執行個體對象都會產生出一個函數say
- function 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:lisi
-
- var user1 = new User();
- 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代碼
- //多個執行個體對象不共用類的屬性值,如下:
- 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:zhangsan
-
- var user1 = new User();
- 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代碼
- //原型方式定義類,缺點:類的屬性值如果是參考型別的(非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:lisi
-
- var user1 = new User();
- 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代碼
- //類的屬性值如果是參考型別的(非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:zhangsan
-
- var user1 = new User();
- 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代碼
- //構造和原型結合方式建立類:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用;缺點:屬性和方法分開定義不是太好。
- function User(){
- this.username = "zhangsan";
- }
- User.prototype.say = function(){
- alert("username: " + this.username );
- }
- var user = new User();
- 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代碼
- ////動態原型方式:優點:類的方法只會產生一個,不會產生大量方法,同時屬性還不共用,同時屬性和方法不是分開定義的
-
- function User(){
- this.username = "zhangsan";
-
- if(typeof User.flag == "undefined"){
- alert("execute...");
- User.prototype.say = function(){
- alert("username: " + this.username );
- }
-
- User.flag = true;
- }
- }
-
- var user1 = new User();//execute...
- var user2 = new User();//不會列印出execute...,則說明方法只建立了一次,即方法只會產生一個
- user1.say();//username