首页 > 代码库 > 第六章-面向对象的程序设计(理解对象)

第六章-面向对象的程序设计(理解对象)

   ESMA把对象定义为:“无序属性的集合,其属性可以包含基本值,对象和函数”。严格的讲,这相当于说对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每一个名字都映射到一个值。

1.理解对象

创建对象有对象字面量的方法,这种方法比较常用,也是比较推荐的。

1 var person ={
2            name:‘xu‘,
3            age:27,
4            sayName:function(){
5                  alert(this.name);
6               }
7         };

还有创建对象的实例的方法:

技术分享

2.属性的类型

     技术分享

 

属性有两种类型:数据属性和访问器属性。

数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有四个描述其行为的特性:

技术分享

      要修改默认属性的特性,必须使用ECMASript5的Object.defineProperty()方法,这个方法收三个参数:属性所在的对象,属性的名字和一个描述符对象。描述符对象的属性就是上面所说的四个特性。

技术分享

访问器属性

   访问器属性不包含数据值,包含一对getter和setter函数(这两个函数不是必须的),在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数,并传入新值,这个函数负责决定如何处理数据。访问器有四个特性。

技术分享

访问器属性不能直接定义,必须使用Object.defineProperty()方法来定义。

技术分享

不一定同时指定getter和setter。只指定getter意味着属性不能写,尝试写入属性会被忽略,严格模式下,尝试写入只指定了getter函数的属性会抛出错误。类似的,只指定setter属性的函数也不能读,否则在非严格模式下会返回undefined,严格模式下会抛出错误。

3.定义多个属性

定义多个属性的时候,ES5定义了新的方法Object.defineProperties()方法。利用这个方法,可以通过描述符一次定义多个属性。它接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性和第一个对象中要添加或修改的属性一一对应。

技术分享

4读取属性的特性

使用ES5中的Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符,这个方法接受两个参数:属性所在的对象,和要读取描述符的属性名称。

如上面的例子,可以得到:

技术分享

 

第六章-面向对象的程序设计(理解对象)