zoukankan      html  css  js  c++  java
  • 为什么要用prototype

    在prototype继承中 原型类中不能有成员对象! 所有成员必须是值类型数据(string也可以)
    用prototype继承有执行效率高,不会浪费内存,为父类动态添置方法后子类中马上可见等的优点。

    function ClassA() {      this.name = 'A'; }
    
    ClassA.prototype = {     str : "BB",     arr : ['K'] }
    
    实例化:     var a = new ClassA(); var b = new ClassA();
    alert(a.str+ "," + b.str+ "," + a.arr + "," + b.arr); 打印 BB,BB,K,K
    a.name = 'C'; a.arr.pop() alert(a.str+ "," + b.str+ "," + a.arr + "," + b.arr); 打印 C,BB, ,
    View Code


    其实很简单, Function 的 prototype 属性允许所有的function实例共享一组 函数和成员, 我们在使用prototype提供的属性的时候,得到的是属性的引用。

    这也就是为什么a.str改变了,b.str没改变,而a.arr 将内容改写了, b.arr也随之改变的原因。

    a.str只是对prototype里面str的一个引用,a.str = "C", 只是将a的str引用指向了C,并没有改变prototype对象中的str的值。

    而a.arr.pop 切实的修改了arr的内容,由于b也是共享同一个arr内存,因此也变了。

    另外prototype 允许动态的向已经定义好的函数和对象添加属性和方法。现在很多面向对象技术是基于prototype实现的继承。

    遵循简单的原则: 类实例共享的方法写如prototype, 这样节省内存。 成员变量不要放到prototype中,常量也不要放入prototype.

  • 相关阅读:
    django中的FBV和CBV
    RESTful
    REST
    18.前端路由router-08权限控制
    17.前端路由router-07keep-alive
    16.前端路由router-06动态路由
    15.前端路由router-05嵌套路由
    14.前端路由router-04编程式导航
    13.前端路由router-03路由参数
    java基础总结
  • 原文地址:https://www.cnblogs.com/liqb/p/3487841.html
Copyright © 2011-2022 走看看