标签:
第6章
1.ES有两种属性:数据属性和访问器属性。属性中包含各种特性,表示属性的各种特征。
数据属性:[[Configurable]],[[Enumerable]],[[Writable]],[[Value]]
修改属性使用方法:Object.defineProperty()
访问器属性:[[Configurable]],[[Enumerable]],[[Get]],[[Set]]
访问器属性不包含数值。只能通过Object.defineProperty()定义。通过设置set和get函数,分别设置读取和写入的时候的行为。P141
2.属性的特性的其他方法:
Object.defineProperties()设置多个属性和其特性
Object.getOwnPropertyDescriptor()读取属性的特性
3.创建对象的模式:
4.工厂模式:解决了重复代码问题,但无法识别对象类型
5.构造函数模式:能够识别对象类型,但每个方法都要在实例上重新创建一遍。不同实例上的同名函数不等。
一个函数通过new来调用就是构造函数,直接调用就是普通函数。
6.原型模式:不必在构造函数中定义对象实例的信息,而是将这些信息直接添加到原型对象中,让所有对象实例共享它包含的属性和方法。
原型对象:(1)创建新函数时,同时创建函数的prototype属性,指向该函数的原型对象。
(2)原型对象生成一个constructor属性,指向原型所在函数。
(3)调用构造函数创建新实例,实例内部包含一个指针[[prototype]],指向原型对象
原型对象的方法:Object.prototype.isPrototypeOf(实例),Object.getPrototypeOf(实例),实例.hasOwnProperty(属性),Objet.key(实例or原型),Object.getOwnPropertyNames(实例或原型)
如果在调用构造函数创建一个实例后,重写原型对象,那么实例的[[prototype]]无法指向新的原型对象。P156
原型模式弊端:所有实例拥有相同属性值,由于共享,实例1的修改会在实例2中体现出来
7.组合使用构造函数模式和原型模式:将属性定义在构造函数中,原型定义方法和需要共享的属性
8.动态原型模式:当方法不存在时,就在原型创建方法
9.寄生构造函数模式:在构造函数中创建新对象,再返回该对象。
构造函数在不返回值的时候,默认会返回新对象实例。通过在构造函数的末尾添加一个return,可以重写调用构造函数返回的值。
10.稳妥构造函数模式:避免使用this和new,某些属性值只有通过唯一的方法才能访问。
标签:
原文地址:http://www.cnblogs.com/little-jelly/p/5747341.html