1原型链继承
可以继承父类原型上的属性
缺点 引用属于类型如果发生变化 都会改变
新实例无法向父类构造函数传参
如果是基本属性类型发生变化 不会改变
2构造函数继承
不可以继承父类原型上的属性
引用数据类型和基本数据类型发生变化 不会改变
新实例可以向父类构造函数传参
3组合继承 (原型链继承和构造函数继承的结合体 最常用)
可以继承父类原型上的属性
新实例可以向父类构造函数传参
引用数据类型和基本数据类型发生变化 不会改变
缺点 调用两次parent的构造函数(Parent.call(), new Parent()) (消耗内存)
4寄生组合继承 (最优)