likes
comments
collection
share

【JS】混合对象“类”

作者站长头像
站长
· 阅读数 38

和“类”相关的面向对象编程:

面向类的设计模式:

  • 实例化
  • 继承
  • (相对)多态
1.类理论

类/继承描述了代码的一种组织结构形式。

面向对象编程强调的是数据和操作数据的行为本质上是相互关联的,好的设计就是把数据以及和他相关的行为打包起来。

类、继承、实例化。

类的另一个核心概念是多态,这个概念是说父类的通用行为可以被子类用更特殊的行为重写。实际上,相对多态性允许我们从重写行为中引用基础行为。

“类”设计模式

面向对象设计模式:

  • 迭代器模式
  • 观察者模式
  • 工厂模式
  • 单例模式
JavaScript中的“类”

近似类的语法元素:new 和 instanceof

类是一种设计模式,可以用一些方法近似实现类的功能

2.“类”的机制
  1. 建造

    实例化

  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
评论
请登录