您的位置:首页 > Web前端 > JavaScript

javascript高级程序设计第六章:面向对象的程序设计——创建对象读书笔记

2013-09-02 16:55 609 查看
1:面向对象的语言的标识是都有类的概念,通过类可以创建任意多个具有相同属性和方法的对象。ECMAScript没有类的概念,它的对象也与基于类的语言中的对象有所不同。

2:ECMAScript的对象是散列表,一组名值对,其中的值可以是数据或函数。每个对象都是基于一个引用类型创建的,可以是原生类型,也可以是自定义类型。

3:创建对象之工厂模式:无法解决对象识别问题,即无法知道一个对象的类型。

4:创建对象之构造函数模式:构造函数使用大写字母开头,创建实例时必须使用new操作符。

5:通过构造函数创建出的对象都有一个constructor属性,该属性指向构造函数。但是检测对象类型时,用instanceof更可靠。

6:构造函数的所有属性和方法,都要在实例中重新创建一遍。要避免重复创建童谣的方法,可以把要定义的方法写在构造函数外部。但是对于要定义很多方法的对象,这样就失去了封装性。

7:创建对象之原型模式:每个函数都有一个prototype属性,这个属性是一个指针指向一个对象。这个对象包含可以由特定类型的所有实例共享的属性和方法。因此使用原型对象可以让所有实例共享它所包含的属性和方法。

8:只要创建了新函数,就会按照规则创建一个prototype属性,这个属性指向原型对象。默认情况下,所有原型对象都会自动获得一个constructor属性,这个属性指向包含prototype属性所在函数的指针。即People.prototype.constructor == People.

9:调用构造函数创建新实例后,新实例会包含一个内部属性 _proto_,这是一个指针,指向构造函数的原型对象。 _proto_ 属性连接于实例与构造函数的原型对象之间。

10:确定实例和构造函数的原型对象之间的关系,用 isPrototypeOf()方法。

11:代码读取对象的属性时,先从对象实例本身开始搜索,找到则停止搜索,找不到则继续搜索_proto_所指向的原型对象。

12:删除实例属性使用 delete 操作符。

13:hasOwnPropertyOf()可以检测一个属性存在于实例中还是原型中。

14:in操作符会在能够访问给定的属性时返回true,不论该属性在原型中还是实例中。for-in循环返回可枚举的属性(未设置[DontEnum]标记),不论在实例中还是原型中。IE除外。

15:通过字面量重写原型,本质上等于重写了默认的prototype对象,因此constructor属性变成了新对象的constructor属性,指向Object。此时instanceof还能返回正确结果,但是constructor已经无法确定对象类型。重写后,实例中的_proto_属性,引用的仍然是最初的原型。即切断了现有原型与任何之前已经存在的对象实例之间的联系。

16:原型对象的问题,在一个对象实例中修改原型属性,会在其他实例中反映出来。所以要组合使用构造函数模式和原型模式。构造函数用于定义实例属性,原型用于定义方法和共享的属性。

17:创建对象的方法还有动态原型模式、寄生构造函数模式和稳妥构造函数模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐