- 借用构造函数继承,使用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的原型)
原型继承:
- 优点:复用父级方法
- 缺点:子类没有自己的属性,所有属性方法只能复用父级,处理不好容易跟别的实例串数据
组合式继承:
思路——使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。