zoukankan      html  css  js  c++  java
  • 面向对象的编程(二)构造函数的继承

    这里主要讲讲,对象之间的继承方法

    现在有一个program的构造函数:

    还有一个book的构造函数:

    怎么样使得“book”继承“program”呢?

    1.构造函数的绑定

    第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:

     1 function Program(){
     2     this.task = '编程';
     3 }
     4  function Book(name,color){
     5      Program.apply(this,arguments);
     6      this.name = name;
     7      this.color = color;
     8  }
     9  Book.prototype.type = '前端';
    10  Book.prototype.read =function(){alert('多读,多实践');}
    11  var book1 = new Book('JavaScript','黄色');
    12  alert(book1.task);//输出:编程

    2.prototype模式

     使用prototype的属性。

     

    这里,我们直接让Book的prototype对象,指向Program的实例,就能继承Program了。

    代码的第一行,我们将Book的prototype对象指向一个Program的实例。

      Book.prototype = new Program();这等于删除了prototype对象原先的值,然后赋予一个新值。

    此时,Book.prototype.constructor指向Program

    Book的实例化对象,每一个实例也有一个constructor属性,默认调用prototype对象的constructor属性,book1.constructor也会指向Program;这导致继承连的紊乱

    所以我们需要将属性改回指向原来的构造函数,这是很重要的一点,编程时务必要遵守。下文都遵循这一点,即如果替换了prototype对象,

      o.prototype = {};

    那么,下一步必然是为新的prototype对象加上constructor属性,并将这个属性指回原来的构造函数。

      o.prototype.constructor = o;

  • 相关阅读:
    螺旋折线——第九届蓝桥杯C语言B组(省赛)第七题
    组合问题
    八皇后
    01背包(详解)
    最长递增子序列
    棋盘游戏
    The Accomodation of Students
    P3157 [CQOI2011]动态逆序对
    Building a Space Station
    焚风现象(差分模板题)
  • 原文地址:https://www.cnblogs.com/xuzhudong/p/6537848.html
Copyright © 2011-2022 走看看