zoukankan      html  css  js  c++  java
  • JS----构造函数与原型prototype 区别

    构造函数方法很好用,但是存在一个浪费内存

    通过原型法分配的函数是所有对象共享的.
    通过原型法分配的属性是独立.-----如果你不修改属性,他们是共享

     如果我们希望所有的对象使用同一一个函数,最好使用原型法添加函数,这样比较节省内存.


    例子:

    //----构造函数模式
    为Cat对象添加一个不变的属性"type"(种类),再添加一个方法eat(吃老鼠)。那么,原型对象Cat就变成了下面这样:

    [javascript] view plain copy
     
     print?
    1. <script>  
    2. function Cat(name, color) {  
    3.     this.name = name;  
    4.     this.color = color;  
    5.     this.type = "猫科动物";  
    6.     this.eat = function () {  
    7.         alert("吃老鼠");  
    8.     };  
    9.     }  
    10.   
    11.   
    12. //生成实例:  
    13. var cat1 = new Cat("大毛", "黄色");  
    14. var cat2 = new Cat("二毛", "黑色");  
    15. alert(cat1.type);         // 猫科动物  
    16. cat1.eat();       // 吃老鼠   
    17.   
    18.   
    19. alert(cat1.eat == cat2.eat); //false  
    20. </script>  

    那就是对于每一个实例对象,type属性和eat()方法都是一模一样的内容,每一次生成一个实例,都必须为重复的内容,多占用一些内存。这样既不环保,也缺乏效率。
      

    //----Prototype模式 
    Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。
    这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。

    [javascript] view plain copy
     
     print?
    1. <script>  
    2. function Cat(name, color) {  
    3.     this.name = name;  
    4.     this.color = color;  
    5.     }  
    6.   
    7.   
    8. Cat.prototype.type = "猫科动物";  
    9. Cat.prototype.eat = function () {  
    10.     alert("吃老鼠")  
    11. };  
    12.   
    13.   
    14. //生成实例。  
    15. var cat1 = new Cat("大毛", "黄色");  
    16. var cat2 = new Cat("二毛", "黑色");  
    17. alert(cat1.type); // 猫科动物  
    18. cat1.eat();// 吃老鼠  
    19.   
    20.   
    21. alert(cat1.eat == cat2.eat);//trueF  
    22. </script>  

    这时所有实例的type属性和eat()方法,其实都是一个内存地址,指向prototype对象,因此就提高了运行效率。
    全部教程http://each.sinaapp.com/angular/index.html
  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/xfdmb/p/5883894.html
Copyright © 2011-2022 走看看