1. 借用构造函数继承,应用call或apply办法,将父对象的构造函数绑定在子对象上
  2. 原型继承,将子对象的prototype指向父对象的一个实例
  3. 组合继承

原型链继承:(不益处:子类实例共享属性,造成实例之间的属性会相互影响)
解决不益处方法是 借用构造函数(类式继承) 又呈现没有原型,无奈复用

function Parent() {  this.name = "heyushuo";}Parent.prototype.sayParentName = function() {  console.log(this.name);};function Child() {  this.name = "kebi";}//1.此时把Child的原型重写了,换成了Parent的实例//2.换句话说,原来存在Parent的实例中的属性和办法,当初也存在Child.prototype中了Child.prototype = new Parent();//3.在继承了Parent实例中的属性和办法后根底上,又增加了属于本人的一个新办法(这里两个名字一样会笼罩)Child.prototype.sayChildName = function() {  console.log(this.name);};var Person = new Child();console.log(Person);//所以当初Person指向Child的原型,Child的原型指向Parent的原型(因为Child的原型对象等于了Parent的实例,这个实例指向Parent的原型)

原型继承:

  • 长处:复用父级办法
  • 毛病:子类没有本人的属性,所有属性办法只能复用父级,解决不好容易跟别的实例串数据

组合式继承:

思路——应用原型链实现对原型属性和办法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保障每个实例都有它本人的属性