面向对象的编程(二)构造函数的继承

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

现在有一个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;

原文地址:https://www.cnblogs.com/xuzhudong/p/6537848.html