1.原型链

2.原型链继承
我的理解就是,属性方法写在构造函数(父类)的原型上,通过new一个实例,使实例继承了父类原型上的方法和属性。

缺点:
1.原型对象的属性,所有实例共享。
2.不能实现多继承(哦,我不知道是啥)
3.创建子类的时候,不能向父类传参数。为啥呀,因为所有属性和方法都是实现写死了。。。收不到参数的
4.为子类新增属性和方法,不能在构造器里直接写
3.构造函数继承
就是用父类的构造函数,将父类的属性以及方法集成到子类里面,简单的说就是...父类就是一个构造函数,call一下,就把自己的东西都给子类了。。。。

Animal.call(this)。就是将animal类的构造函数执行一遍,修改了this的指向,this指向Cat类,该语句执行完,Cat类就多了name属性和sleep方法。然后Cat类把继承来的name属性进行重写。
缺点: 1.实例是子类的实例
2.不能继承父类原型上的属性和方法
3.无法实现函数复用
4.实例继承
这个我理解了,就是new一个父类的实例,然后往这个实例里加属性和方法,然后返回。这个很机智。

缺点:1.实例是父类的实例
2.不支持多继承
5.拷贝继承
遍历父类的属性和方法,依次赋值到子类中。

缺点:1.效率低,占内存
2.父类可能有for...in...访问不到的属性
6.组合继承
组合继承就是,将父类的实例赋值给子类的原型。构造函数继承+原型继承

缺点:调用了两次父类,生成了两次父类实例。
7.寄生组合继承
奥哟,这个贼麻烦,用寄生继承修复了组合继承的小bug,实例化临时副本,实现原型继承。

缺点就是实现太复杂,不过性能堪称完美。