【JS】混合对象“类”
和“类”相关的面向对象编程:
面向类的设计模式:
- 实例化
- 继承
- (相对)多态
1.类理论
类/继承描述了代码的一种组织结构形式。
面向对象编程强调的是数据和操作数据的行为本质上是相互关联的,好的设计就是把数据以及和他相关的行为打包起来。
类、继承、实例化。
类的另一个核心概念是多态,这个概念是说父类的通用行为可以被子类用更特殊的行为重写。实际上,相对多态性允许我们从重写行为中引用基础行为。
“类”设计模式
面向对象设计模式:
- 迭代器模式
- 观察者模式
- 工厂模式
- 单例模式
JavaScript中的“类”
近似类的语法元素:new 和 instanceof
类是一种设计模式,可以用一些方法近似实现类的功能
2.“类”的机制
-
建造
实例化
-
构造函数
类实例是由一个特殊的类方法构造的,这个方法通常和类名相同,被称为构造函数这个方法的任务就是初始化实例需要的所有信息(状态)。构造函数大多需要new来调,这样语言引擎才知道你想要构造一个新的类实例。
3.类的继承
子类会包含父类行为的原始副本,但是也可以重写所有继承的行为甚至定义新行为。
多态
使用super,含义是“超类“来表示当前类的父类/祖先类。
JavaScript中,类是属于构造函数的。
在子类(而不是他们创建的实例对象)中也可以相对引用他继承的父类,这种相对引用通常被称为super。
多态并不表示子类和父类有关联,子类得到的只是父类的一份副本。类的继承其实就是复制。
多重继承
存在钻石问题。
4.混入
1.显式混入
相对多态: inherited:drive()
显式多态:Vehicle.drive.call(this)
混合复制
//非常简单的的mixin(..)例子
function mixin(sourceObj,targetObj){
for (var key in sourceObj){
//只会在不存在的情况下复制
if (!(key in targetObj)){
targetObj[key] = sourceObj[key];
}
}
return targetObj;
}
JavaScript中的函数无法真正的复制,所以只能复制对共享对象的引用
寄生继承
2.隐式混入
通过this绑定。
转载自:https://juejin.cn/post/6844903919945007118