一、要点
ECMAScript中没有类的概念,对象的定义为:无序属性的集合,其属性可以包含基本值、对象、或者函数。
创建对象的方法:var aOject = new Object();
然后为对象添加属性和方法:aObject.aPorperty = something;
aObject.aMethod = something;
...
创建对象的字面量语法: var aObject = {aProperty : something;
aMthod : function(){
something...}
....}
对象的属性——数据属性和访问器属性
数据属性:包含一个确定的值的属性,我们所接触的属性大多数是数据属性
数据属性的特征(attribute):
1、congfigurable:能否通过Delete删除并重定义(默认为Ture)
2、Enumerable:能否通过for-in循环
3、writable:能否修改(默认为True)
4、value:属性的值
attribute一般是不可访问的,欲修改可使用object.defineProperty()方法
object.denfineProperty()方法接受3个参数:属性所在的对象,属性名,和一个描述符对象
一个描述符对象:{attribute : "attribute's value"}
可以多次使用object.defineProperty()修改特征值,但是当把configurable设置为false后,无法再修改为True。
访问器属性:访问器属性不包含数据值,它包含一对getter和setter函数(非必需)
访问器属性不能直接定义,必需使用object,defineProperty()方法定义
访问器属性使用其自带的get函数读取一个数值,使用set函数将属性写入
典型的应用:设置一个值导致另一个值发生变化
访问器属性的attribute:
1、configurable
2、Enumerable
3、Get:读取属性时调用的函数
4、Set:写入属时调用的函数
定义多个属性:object.defineProperties()方法
两个参数:1、要添加或修改属性的对象
2、一个属性与参数一的对象中要添加的属性一一对应的对象
读取对象的特性:object.getOwnPropertyDescriptor()方法
2个参数:1、对象
2、所要描述的属性名称
返回一个对象,对象的属性为attribute
二、示例
使用字面量语法创建一个对象
var aObject = { name : "wan", age : 23, gradute : False; //数据属性,每个属性都有一个数值 }
下面为aObject对象添加一个访问器属性
object.defoineProperty(aObject,"newAge",{ //使用定义属性的方法定义一个访问器属性 get : function(){ //传入3个参数第三个参数是一个描述符对象 return this.age; //描述符对象:包含属性为attribute的对象 }, //访问器属性的get特性函数传入age set : function(gradute){ if(gradute) //set特性函数 { age+=1; } /*访问器属性的一大应用, } 对象的某个属性发生变化时, }); 其它属性随之变化*/
定义多个属性
var aObject = {}; Object.defineProperties(aObject,{ name:{value : "wan"}, age:{value : 23}, graduate:{value : False}, newAge:{ get : function(){ return this.age; }, set : function(){ if(graduate){ this.age += 1; } } } });
这里定义了一个和之前的aObject对象相同的对象,只不过这里的属性是同时创建的
读取属性的特性:
var descriptor = Object.getOwnPropertyDescriptor(aObject,"name");
以上代码返回一个对象,变量descriptor成为该对象的指针
descriptor.value //对象aObject的name属性的value特性
descriptor.configurable //对象aObject的name属性的configurable特性
三、总结
有两种创建对象的方法,我们一般是用字面量发创建一个对象
对象有两种属性,分别为数据属性和访问器属性,我们一般使用的是数据属性
属性拥有特性(attribute),描述了属性的一些特征,我们一般无法访问这些特性
我们可以使用Object.getOwnPropertyDescriptor()方法来读取这些特性
定义属性可以使用Object.defineProperty()方法,定义数据属性只需直接声明,
而定义访问器属性必需使用此方法,与直接声明的区别在于,此方法还可以设置属性的
特性(attribute),此方法有助于帮助我们理解属性的本质
可以使用Object.defineProperties()方法来同时定义多个属性
转载于:https://blog.51cto.com/10703847/1697614