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:创建对象的方法还有动态原型模式、寄生构造函数模式和稳妥构造函数模式。
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:创建对象的方法还有动态原型模式、寄生构造函数模式和稳妥构造函数模式。
相关文章推荐
- javascript高级程序设计第六章:面向对象的程序设计——继承读书笔记
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- 读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计
- JavaScript高级程序设计 (6章 创建对象)---读书笔记
- JavaScript高级程序设计 第六章 面向对象程序设计
- 【javascript高级程序设计】读书摘录3 第六章、面向对象
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
- javascript高级程序设计第三版 第六章 面向对象的程序设计
- javascript高级程序设计读书笔记----面向对象的程序设计
- 你不知道的JavaScript--面向对象高级程序设计
- javascript面向对象程序设计高级特性经典教程(值得收藏)
- javascript高级程序设计笔记(第6章 面向对象的程序设计)
- JavaScript高级程序设计之面向对象的程序设计之创建对象之 构造函数模式第6.2.2讲笔记
- JavaScript高级程序设计(第3版)第六章读书笔记
- 《JavaScript高级程序设计 第三版》学习笔记 (四) 对象创建详解
- JavaScript高级程序设计 读书笔记之十 本地对象Date日期
- javascript笔记3-面向对象的程序设计-创建对象
- JavaScript高级程序设计笔记之面向对象
- javascript面向对象创建高级 Web 应用程序