只支持实现继承,主要依靠原型链实现。
原型链 原型链的构建是通过将一个类型的实例赋值给另一个构造函数的原型实现的 基本思想: 利用原型让一个引用类型继承另一个引用类型的属性和方法 问题: a.包含引用类型值的原型属性,在通过原型实现继承时,实例属性会被继承共享 b.在创建子类型的实例时,不能向超类型的构造函数中传递参数(不影响所有对象实例的情况下)
借用构造函数/伪造对象/ 解决原型中包含引用类型值所带来的问题 基本思想: 在子类型构造函数的内部调用超类型构造函数 优势:在子类型构造函数中向超类型构造函数传递参数 问题:方法都在构造函数中定义,不能复用。超类型的原型中的方法,对子类型不可见。
组合继承/伪经典继承 JavaScript中最常用的继承模式 将原型链和借用构造函数的技术组合到一起 基本思想: 使用原型链实现对原型属性和方法的继承,通过借用构造函数来实现对实例属性的继承 优点:实现了函数复用,又能够保证每个实例都有自己的属性 缺点:无论什么情况下,都会调用两次超类型构造函数(创建子类型原型时和在子类型构造函数内部)
原型式继承 借助原型基于已有对象创建新对象,不必因此创建自定义类型 只是想让一个对象与另一个对象保持类似的情况下,原型式继承完全胜任 注意:包含引用类型值的属性始终都会共享相应的值
寄生式继承 基本思想: 创建一个仅用于封装继承过程的函数,在内部以某种方式来增强对象,最后再返回对象。 注意:使用寄生式继承来为对象添加函数,会由于不能做到函数复用而降低效率
寄生组合式继承 开发人员普遍认为寄生组合式继承是引用类型最理想的继承范式 通过借用构造函数来继承属性,通过原型链的混成形式来继承方法 基本思想: 使用寄生式继承来继承超类型的原型,再将结果指定给子类型的原型。