原型继承的缺点:
(1).超类型中有引用类型(color是一个数组)的属性时,子类型继承超类型,一个子类型中对该引用类型修改,会反应到所有的子类型上。所有子类型共享超类型的引用类型.
例如:
(2).创建子类型实例时无法向超类型的构造函数中传递参数
2. 构造函数继承
利用call()和apply()方法在新的对象上执行超类型的构造函数。
超类型:指的是被继承的类型。
a.func.call(b) /*指的是a对象的方法应用到b对象上*/ a.func.apply(b) // 主要是参数的区别
代码示例:
构造函数继承的优点:
使子类Child在创建对象的同时传递参数到父类Parent
构造函数继承的缺点:
无法进行函数的复用,a的原型中定义的方法也无法继承。
3. 组合继承(将原型链继承和借用构造函数继承组合起来)
主要思想是:使用原型链实现对a原型属性和方法的继承,通过构造函数实现对a实例属性的继承。
代码示例如下:
缺点:要调用两次超类型的构造函数(注释的两个地方)
4. 原型式继承
主要思想是:实现对父类的浅复制,产生一个副本
Object.create()函数实现的就是原型式继承
代码示例如下: