zoukankan      html  css  js  c++  java
  • 关于prototype以及继承方面的理解

    学习笔记(致 渐悟)

    写在前面的话

    今天看<javascript高级程序设计>的时候,看到有关继承和原型链prototype时遇到些疑问,特回来研究下,同时也感谢JS群网友"渐悟"的指导,非常感谢!

    先给Demo,再说话

     1         function Polygon(iSides) {
     2             this.sides = iSides;
     3             this.sex = "男";
     4             this.getName = function () {
     5                 console.log("断桥残雪1");
     6             };
     7         }
     8         Polygon.prototype.getName = function () {
     9             console.log("断桥残雪2");
    10         };
    11         Polygon.prototype.getArea = function () {
    12             return 0;
    13         };
    14         Polygon.prototype.sex = "man";
    15         Polygon.age = 100;
    16 
    17         //三角形
    18         function Triangle(iBase, iHeight) {
    19             //Polygon.call(this, 3);
    20             this.base = iBase;
    21             this.height = iHeight;
    22             this.getName = function () {
    23                 console.log("断桥残雪4");
    24             };
    25         }
    26 
    27         Triangle.prototype = new Polygon();
    28         Triangle.prototype.getArea = function () {
    29             return 0.5 * this.base * this.height;
    30         };
    31         Triangle.prototype.getName = function () {
    32             console.log("wawawa");
    33         };
    34 
    35 
    36         var obj = new Triangle(2, 7);
    37         //var area = obj.getArea();
    38         obj.getName();
    39         //console.log(area);
    40         console.log(obj.age);
    41         console.log(obj.sex);

    测试后总结

    • 新增prototype对象方法,只有其成员实例可以访问该方法,两者决然不同(这一句是废话,嘿嘿),例如:
      1 A.prototype.Method=function(){ };
      2 A.Method=function(){ };
    • 原型链prototype可以利用其特殊性,变向的实现继承
    • 类方法/对象方法/原型方法,三者在遇到以下实现时需要注意:
      1 Triangle.prototype = new Polygon();
      2 Triangle.prototype = Polygon.prototype;

      => 第一行是将Polygon成员实例赋给Triangle的prototype,包括Polygon的对象属性、方法和原型属性、方法,不包括类属性、方法。
      => 第二行是将Polygon的prototype直接赋给Triangle的prototype,仅包括Polygon中prototype对象的属性和方法。

    • 准确的来说,prototype不能完全实现继承,因为使用protype时是无法传递参数的。若要实现继承,更恰当的方式是用对象冒充的方式继承父类的属性(当然prototype也可以继承父类的属性,有局限),然后用原型链继承父类的方法。
    • 当父类存在成员方法A,然后父类的原型链中也存在方法A,子类继承了父类,且子类也重写了成员方法A和prototype对象方法A,则他们的调用顺序优先级为:子类A() > 子类prototype对象方法A() > 父类成员方法A() > 父类prototype对象方法A()

    结语

    好了,今天后来有事儿去了,耽搁了,差点忘记了,要不然明天捂脸见你,说句实话我回来学习了下,也就知道这些了,希望你看到有错误不足啥的可以提出,谢谢!

    今天身为程序员的班子,十一抢火车票,又用客户端App又用浏览器插件的,还是木有抢到票,啊啊啊......

  • 相关阅读:
    js中实现继承的几种方式
    js中prototype,__proto__,constructor之间的关系
    圣杯布局
    BFC详解
    Altium制作DC002的PCB封装和3D模型
    直流供电电路中,关于电源并联二极管、电容作用的思考与总结
    AltiumDesigner17快捷键
    AltiumDesigner17学习指南
    AltiumDesigner元器件搜索中英文对照
    智慧树自动刷课脚本
  • 原文地址:https://www.cnblogs.com/vchenpeng/p/3999306.html
Copyright © 2011-2022 走看看