继承

目标:实现sub函数继承super函数

原型链

1
2
//关键代码
sub.prototype = new super();

缺点:

  1. 无法在不影响sub所有对象实例的情况下,给super的构造函数传参
  2. 引用类型值的super原型属性会被所有sub实例共享

调用构造函数,改this

1
2
3
function sub(){
super.call(this,参数)
}

要点:相当于把super构造函数复制到sub构造函数中执行
新创建的sub对象上执行super函数中的所有对象初始化代码,所以!sub的每个实例都会有自己的属性(和super一样的属性)副本了。

缺点:

  1. 只能继承super的成员方法,无法继承super原型

组合继承

1
2
3
4
5
6
7
8
function sub(){
super.call(this,参数)
}
sub.prototype = new super();
//sub原型的consructor 属性指向自己
sub.prototype.consructor = sub;
//新增公用方法
sub.prototype.getName = function(){}