Javascript面向对象:构造函数的继承

  • A+
所属分类:Web前端
摘要

var son = new Son(“儿子”,”12″);alert(son.name ); // 儿子步骤一:Son .prototype = Father.prototype;


构造函数的继承

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

}