看了阮一峰的网络日志(http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html),记录一下构造函数继承的几种方式。

1、构造函数绑定

使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:Parent.apply(Child, arguments);

2、使用prototype模式

第一步(删除Child的prototype 对象原先的值,赋予一个新值):Child.prototype = new Parent();

第二步(Child的原型的构造器指向Child):Child.prototype.constructor = Child;

3、直接继承prototype

Child.prototype = Parent.prototype;

Child.prototype.constructor = Child;

4、利用空对象作为中介

function extend(Child, Parent) {
  var F = function(){};

  F.prototype = Parent.prototype;

  Child.prototype = new F();

  Child.prototype.constructor = Child;

  Child.uber = Parent.prototype;

}

5、拷贝继承

第一步:把Parent的所有不变属性,都放到它的prototype对象上。

第二步:将父对象的prototype对象中的属性,一一拷贝给Child对象的prototype对象。

function extend(Child, Parent) {

  var p = Parent.prototype;

  var c = Child.prototype;

  for (var i in p) {

    c[i] = p[i];

  }

  c.uber = p;

}