原型链:在JavaScript中几乎所有的对象都具有proto属性,由proto属性连接而成的链路构成了JavaScript的原型链,原型链的顶端是Object.prototype,它的proto属性为null。

原型链继承

Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
缺点:

  1. 子类的所有实例将共享父类的属性
  2. 在创建子类实例时,无法向父类的构造函数传递参数
  3. 无法实现多继承
  4. 为子类增加原型对象上的属性和函数时,必须放在new Animal()函数之后

构造继承

function Cat(name) {
Animal.call(this);
}
缺点:

  1. 只能继承父类实例的属性和函数,并不能继承原型对象上的属性和函数
  2. 无法复用父类的实例函数

组合继承

是组合了构造函数和原型继承两种方法;
function Cat(name) {
Animal.call(this);
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;

缺点:

  1. 父类的实例属性会绑定两次

寄生组合继承

const Super = function() {};
Super.prototype = Animal.prototype;
Cat.prototype = new Super();
Cat.prototype.constructor = Cat;