工厂模式
|
|
优点:创建多个相似对象
缺点:无法知道对象的类型
构造函数模式
|
|
构造函数以大写字母开头
用new
的方式调用构造函数,会经历以下4个步骤:
- 创建一个新对象
- 将构造函数的作用域赋给新对象(
this
指向新对象) - 执行构造函数中的代码
- 返回新对象
优点:解决了对象类型识别的问题,可以规定特定的对象类型名称
缺点:每个实例上的同名函数不相等,即每个实例上的方法都是新构造出来的
原型模式
|
|
优点:共享了属性
缺点:共享的引用类型的数据(如:Array),也被所有实例共享了
理解原型对象
[[Prototype]]的链接存在于实例与构造函数的原型之间,不是存在于实例与构造函数之间
|
|
在读取对象中的属性时,先搜索实例,后搜索原型。
取得对象上所有可枚举的实例属性
Object.keys()
包括原型中与实例中的属性
更简单的原型语法
|
|
组合使用构造函数模式和原型模式
|
|
集合了构造函数模式和原型模式的优点
动态原型模式
|
|
寄生构造函数模式
|
|
Person构造函数在原有Object的基础上添加了额外的属性和方法,而没有改变Object本身
优点:可以在不改变原有构造函数的前提下,为新构造函数添加方法
缺点:无法使用instanceof确定对象类型
稳妥构造函数模式
要求:
- 新创建对象的实例方法不引用this
- 不使用new操作符调用构造函数
|
|
优点:除了sayName方法,没有其他方法可以访问传入构造函数中的原始数据
缺点:不能用过instanceof方法确定对象类型