• javascript类的构建(转)


    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对象的影响  


    //多个实例对象不共享类的属性值:
    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影响  


    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类型),则多个实例对象共享:
    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指向同一引用,即共享同一属性  


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


    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  
  • 相关阅读:
    【转载】Linux的进程间通信-信号量
    【转载】高性能数据库连接池的内幕
    【转载】我是一块硬盘(下)
    【转载】我是一块硬盘(上)
    69. Sqrt(x)
    68. Text Justification
    67. Add Binary
    66. Plus One
    65. Valid Number
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/poplau/p/1286666.html
Copyright © 2020-2023  润新知