构造函数的继承
现在有一个Father构造函数
function Father(name, age) {
this.name = name;
this.age = age;
}
Father.prototype.song = function () {
console.log(‘父亲的原型对象函数’)
}
还有一个Son构造函数
function Son(name, age) {
this.name = name;
this.age = age;
}
1.首先用call或者apply方法,将父对象的构造函数绑定在子对象上。
function Son(name, age) {
Father.call(this, name, age)
this.name = name;
this.age = age;
}
/**{原型继承部分代码位置}**/
Son.prototype.long=function () {
console.log(‘儿子的原型对象函数’)
}
var son = new Son("儿子","12");
alert(son.name ); // 儿子
注意:此时子级继承了父级的构造函数,但是没有继承父级的原型对象。也就是son.song()会报错,提示没有song这个方法。
2.子级继承父级的原型对象上的方法。
步骤一:Son .prototype = Father.prototype;
步骤二:Son.prototype.constructor = Son;
var son = new Son("儿子","12");
alert(son.song ()); // 父亲的原型对象函数
注意:将步骤一和步骤二的代码放入红色标记部分。否认Son.prototype.long方法会被覆盖掉。
由于Son .prototype = Father.prototype,子类的原型直接指向父类的原型,这样会导致,修改子类原型对象的时候,也会修改父类原型对象。为了避免这个问题,我们可以使用第三种方式,找一个中间构造函数,来作为介质。
3.
function extend(Son,Father){
var F = function(){}
fn.prototype = new Father()
Son.prototype =new F()
Child.prototype.constructor = Child;
}