这里主要讲讲,对象之间的继承方法
现在有一个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;