对于JS继承详细介绍( 原型链,构造函数,组合,原型式,寄生式,寄生组合,Class extends)
说实在话,以前我只需要知道“寄生组合继承”是最好的,有个祖传代码模版用就行。最近因为一些事情,几个星期以来一直心心念念想整理出来。本文以《JavaScript高级程序设计》上的内容为骨架,补充了ES6 Class的相关内容,从我认为更容易理解的角度将继承这件事叙述出来,希望大家能有所收获。 继承分类 JS中继承可以按照是否使用object函数(在下文中会提到),将继承分成两部分(Object.create是ES5新增的方法,用来规范化这个函数)。 其中,原型链继承和原型式继承有一样的优缺点,构造函数继承与寄生式继承也相互对应。寄生组合继承基于Object.create, 同时优化了组合继承,成 JavaScript中的继承机制是其面向对象特性的重要组成部分,它允许创建基于现有对象的新对象,从而能够重用和扩展功能。在JavaScript中,有多种继承实现方式,包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承以及寄生组合继承。随着语言的发展,ES6引入了`Class`关键字和`extends`来简化继承的实现,但其底层机制仍基于这些经典模式。 1. **原型链继承**: - 原型链继承的核心在于通过`__proto__`或`Object.create()`将父类的实例设置为子类的原型。 - 子类的实例可以直接访问父类的属性和方法,实现了资源共享。 - 缺点是父类的所有实例共享引用类型属性,可能造成数据混乱。 - `SubType.prototype = new SuperType()`会导致父类构造函数被调用,创建不必要的父类实例。 2. **构造函数继承**: - 构造函数继承通过`SuperType.call(this)`在子类构造函数内部调用父类构造函数,将父类的状态复制给子类实例。 - 这种方式避免了引用类型属性的共享,但无法复用父类的方法,每个子类实例都有独立的方法副本。 3. **组合继承**: - 结合了原型链和构造函数继承的优点,既能复用父类方法,又能独立初始化实例属性。 - 缺点是由于两次调用父类构造函数,可能会导致性能损失,并产生冗余属性。 4. **原型式继承**: - 通过创建一个临时的构造函数并让其原型等于目标对象,实现对目标对象的浅复制。 - 使用`Object.create()`可以规范化此过程,提供更安全的继承。 - 缺点是同样存在引用类型属性共享的问题,且无法传递构造函数参数。 5. **寄生式继承**: - 在原型式继承基础上,返回一个修改后的父类副本,以避免直接修改父类对象。 - 这种方式可以解决原型式继承中不能传递参数的问题。 6. **寄生组合继承**: - 被认为是最理想的继承方式,结合了寄生式继承(避免构造函数的额外开销)和组合继承(复用父类方法)。 - 具体做法是先通过寄生式继承创建一个没有实例属性的父类副本,然后将这个副本赋值给子类的原型。 7. **ES6 Class extends**: - ES6引入的`Class`和`extends`关键字提供了更简洁的语法糖,底层实现与寄生组合继承相似。 - `class SubType extends SuperType`会在子类中创建一个指向父类原型的链接,并调用父类构造函数,但避免了冗余属性的创建。 理解这些继承方式有助于开发者根据实际需求选择最合适的实现,同时也能深入理解JavaScript的内部工作原理。在实际开发中,通常会根据项目特点和性能要求选择寄生组合继承或使用ES6的`Class`和`extends`。
- 粉丝: 5
- 资源: 931
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- qaxbrowser-1.1.32574.52.exe (奇安信浏览器windows安装包)
- C#编写modbus tcp客户端读取modbus tcp服务器数据
- 某房地产瑞六补环境部分代码
- 基于Matlab实现无刷直流电机仿真(模型+说明文档).rar
- AllSort(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
- 模拟qsort,改造冒泡排序使其能排序任意数据类型,即日常练习
- carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化
- 数组经典习题之顺序排序和二分查找和冒泡排序
- 永磁同步电机神经网络自抗扰控制,附带编程涉及到的公式文档,方便理解,模型顺利运行,效果好,位置电流双闭环采用二阶自抗扰控制,永磁同步电机三闭环控制,神经网络控制,自抗扰中状态扩张观测器与神经网络结合
- 基于 Oops Framework 提供的游戏项目开发模板,项目中提供了最新版本 Cocos Creator 3.x 插件与游戏资源初始化通用逻辑