理解概念
对象
工厂模式
使用函数创建对象,封装以待定接口创建对象的细节,函数内部创建对象并return
构造函数模式
构造函数有下面几个优点:
原型模式被不同的实例实例化之后仍然指向同一对象——共享
缺点:原型模式的缺点也是由于其共享性带来的,对象内容的改变会使所有的实例都受影响
动态原型模式
可以通过 函数名.prototype.对象名 动态添加对象
寄生构造函数模式
带上构造函数名字、使用new声明的“工厂模式”,不推荐使用
继承
OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,实现继承继承实际的方法
构造函数、原型、实例的关系:每个构造函数都有一个原型对象,原型对象包括一个指向构造函数的指针、实例都包括一个指向原型内部的指针
原型链
原型链有下面几个特点:
- 原型链的构成是一个类型的原型对象等于另一个类型的实例,从而构成原型链
- 原型链的根节点都是Object,其中包含很多默认方法
- 可以重写方法
- 不能通过字面量的方法定义新方法,这样会导致链的断裂
原型链的缺点:
- 共享
- 不能给超类型构造函数传递参数(借用构造函数可以传入参数,call/aplly)
所以一般不单独使用原型链
ps:区分实例属性与原型方法
组合继承(伪经典继承)
借用原型链和构造函数的优点,让不同的实例既可以拥有自己的属性,又可以共用方法。1
2SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;
⚠️注意第二行
原型式继承
多个对象从一个原型得到继承(待更新)
寄生式继承
寄生式继承与原型式继承紧密相关,在原型式继承的基础上增强对象
寄生组合式继承
寄生组合式继承可以减少一次调用SuperType()并且能实现相同的效果