课程名称:破解JavaScript高级玩法
课程章节:第6章 从函数到函数式编程之路
主讲老师:Cloud
课程内容:
今天学习的内容包括:
6-7 组合和继承,谁与争锋——使用好组合和继承,工作中可以复用模块,节省时间。
课程收获:
组合(has -a关系)
- 在一个类/对象内使用其他的类/对象。
- has-a:包含关系,体现的是整体和部分的思想。
- 黑盒复用:对象的内部细节不可见。知道怎么使用就可以了
组合的优点
- 功能相对独立,松耦合
- 扩展性好
- 符合单一职责,复用性好
- 支持动态组合,即程序运行中组合
- 具备按需组装的能力
组合的缺点
- 使用上相比继承,更加复杂一些
- 容易产生过多的类/对象
继承( is - a 关系)
- 继承是is-a的关系,比如人是动物
- 白盒复用:你需要了解父类的实现细节,从而决定怎么重写父类的方法
继承的优点
- 初始化简单,子类自动具备父类的能力
- 无需显式初始化父类
继承的缺点
- 继承层级多,会导致代码混乱,可读性变差
- 耦合紧
- 扩展性相对组合较差
组合和继承的最终目的
- 当然是逻辑复用,代码复用
多态
- 事物在运行过程中存在不同的状态
- 多态形成条件:需要有继承关系、子类重写父类的方法、父类指向子类
何时使用谁
- 有多态的需求的时候,考虑使用继承
- 如果有多重继承的需求,考虑使用组合
- 既有多态又有多重继承,考虑使用继承+组合
ES5的继承方式
- 原型链继承
- 构造函数继承
- 原型式继承
- 组合继承
- 寄生式继承
- 寄生组合继承
寄生组合继承解决的问题
- 各个实例的属性独立,不会发生修改一个实例,影响另外—个实例
- 实例化过程中没有多余的函数调用
- 原型上的constructor属性指向正确的构造函数
继承的一种变体
- mixin:混入
- 把属性拷贝到原型,让其实例也有相应的属性
ES6继承注意点
- 构造函数this使用前,必须先调用super方法
- 注意箭头函数形式的属性
- class若是想在原型上添加非承数的属性还但依赖prototype
今天 学习了 组合和继承,再次理解了组件和继承之间的关联和差异,基础知识还是要了解的。对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~