1.原型链
![](https://img.haomeiwen.com/i8054470/0dc74aee06d76549.png)
2.原型链继承
我的理解就是,属性方法写在构造函数(父类)的原型上,通过new一个实例,使实例继承了父类原型上的方法和属性。
![](https://img.haomeiwen.com/i8054470/f5983ccceccee9a2.png)
缺点:
1.原型对象的属性,所有实例共享。
2.不能实现多继承(哦,我不知道是啥)
3.创建子类的时候,不能向父类传参数。为啥呀,因为所有属性和方法都是实现写死了。。。收不到参数的
4.为子类新增属性和方法,不能在构造器里直接写
3.构造函数继承
就是用父类的构造函数,将父类的属性以及方法集成到子类里面,简单的说就是...父类就是一个构造函数,call一下,就把自己的东西都给子类了。。。。
![](https://img.haomeiwen.com/i8054470/c4ef07f9236a28b2.png)
Animal.call(this)。就是将animal类的构造函数执行一遍,修改了this的指向,this指向Cat类,该语句执行完,Cat类就多了name属性和sleep方法。然后Cat类把继承来的name属性进行重写。
缺点: 1.实例是子类的实例
2.不能继承父类原型上的属性和方法
3.无法实现函数复用
4.实例继承
这个我理解了,就是new一个父类的实例,然后往这个实例里加属性和方法,然后返回。这个很机智。
![](https://img.haomeiwen.com/i8054470/247d8c11fc6b8620.png)
缺点:1.实例是父类的实例
2.不支持多继承
5.拷贝继承
遍历父类的属性和方法,依次赋值到子类中。
![](https://img.haomeiwen.com/i8054470/f47a3c4cd02617a0.png)
缺点:1.效率低,占内存
2.父类可能有for...in...访问不到的属性
6.组合继承
组合继承就是,将父类的实例赋值给子类的原型。构造函数继承+原型继承
![](https://img.haomeiwen.com/i8054470/18c1542afc04072c.png)
缺点:调用了两次父类,生成了两次父类实例。
7.寄生组合继承
奥哟,这个贼麻烦,用寄生继承修复了组合继承的小bug,实例化临时副本,实现原型继承。
![](https://img.haomeiwen.com/i8054470/4ca299b5ecba3d7a.png)
缺点就是实现太复杂,不过性能堪称完美。
网友评论