原型链:在JavaScript中几乎所有的对象都具有proto属性,由proto属性连接而成的链路构成了JavaScript的原型链,原型链的顶端是Object.prototype,它的proto属性为null。
原型链继承
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
缺点:
- 子类的所有实例将共享父类的属性
- 在创建子类实例时,无法向父类的构造函数传递参数
- 无法实现多继承
- 为子类增加原型对象上的属性和函数时,必须放在new Animal()函数之后
构造继承
function Cat(name) {
Animal.call(this);
}
缺点:
- 只能继承父类实例的属性和函数,并不能继承原型对象上的属性和函数
- 无法复用父类的实例函数
组合继承
是组合了构造函数和原型继承两种方法;
function Cat(name) {
Animal.call(this);
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
缺点:
- 父类的实例属性会绑定两次
寄生组合继承
const Super = function() {};
Super.prototype = Animal.prototype;
Cat.prototype = new Super();
Cat.prototype.constructor = Cat;