1、理解对象
属性类型:数据类型和访问器类型
数据属性:[[Configurable]]:能否通过delete删除属性从而重定义属性或者能否修改属性的特性,能否把属性修改为访问器属性
[[Enumerable]]:能否通过for-in 循环返回属性
[[Writable]]:能否修改属性的值
[[Value]]:包含这个属性的数据值
访问器属性:[[Configurable]]:能否通过delete删除属性从而重定义属性或者能否修改属性的特性,能否把属性修改为数据属性
[[Enumerable]]:能否通过for-in 循环返回属性
[[Get]]:在读取属性时调用的函数
[[Set]]:在写入属性时调用的函数
2、创建对象
工厂模式:抽象具体对象的过程。用函数来封装以特定接口创建对象的细节(解决了多次创建对象的问题,但是没有解决对象识别的问题)
构造函数模式:构造函数以大写字母开头它没有显式的创建对象,直接将属性和方法赋给了this对象,没有ruturn对象。将来可以将它的实例标识为一种特定的类型,正是构造函数模式胜过工厂模式的地方。
原型模式:创建的函数都有一个原型属性,这个属性是一个指针,指向一个对象,而这个对象包含可以由特定类型的所有实例共享的属性和方法。使用原型对象的好处是可以让所有的对象实例共享它所包含的属性和方法。
组合使用构造函数模式和原型模式:构造模式用于定义实例属性,而原型模式用于定义方法和共享的属性。
动态原型模式:把所有的信息都封装在构造函数中,而通过在构造函数中初始化模型,又保持了同时使用构造函数和原型的优点
寄生构造函数模式:创建一个函数,该函数的作用是封装对象的代码,然后再返回创建的对象。
稳妥构造函数模式:遵循与寄生构造函数类似的模式,但是它新创建对象的实例方法不引用this而且不使用new 操作符调用构造函数。
3、继承
原生链:利用原型让一个引用类型继承另一个引用类型的属性和方法。每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型的内部指针。
继承通过创建SuperType的实例,并将该实例赋给SubType.prototype实现的。
组合继承:将原型链和借用构造函数的技术组合到一块。既通过在原型上定义方法实现了函数复用又能保证每个实例都有它自己的属性。
原型式继承:可以在不必预先定义构造函数的情况下实现继承,其本质是执行对给定对象的浅复制。
寄生式继承:与原型式继承非常相似,也是基于某个对象或某些信息创建一个对象,然后增强对象,最后返回对象。
寄生组合式继承:集寄生式继承和组合继承的优点于一身,是实现基于类型继承的最有效力的方式。