- 借用构造函数继承,应用 call 或 apply 办法,将父对象的构造函数绑定在子对象上
- 原型继承,将子对象的 prototype 指向父对象的一个实例
- 组合继承
原型链继承:(不益处:子类实例共享属性,造成实例之间的属性会相互影响)
解决不益处方法是 借用构造函数(类式继承) 又呈现没有原型,无奈复用
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 的原型)
原型继承:
- 长处:复用父级办法
- 毛病:子类没有本人的属性,所有属性办法只能复用父级,解决不好容易跟别的实例串数据
组合式继承:
思路——应用原型链实现对原型属性和办法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保障每个实例都有它本人的属性