1.定义:
① 无序属性的集合,其属性可以包含基本值、对象或者函数;
②对象是一组没有特定顺序的值,对象的每个属性和方法都有一个名字,而每个名字都映射到一个值;
③可以看成是散列表,是成组的名值对,其中值可以是数据或函数
2.属性类型
①对象中的属性分为:数据属性和访问器属性
②修改writable的特性值
var person {};
Object.defineProperty(person,"name",
{writable:false; //修改特性值writable为属性值不可修改
value:"amy";
});
alert(person.name); //"amy"
person.name="gery";
alert(person.name); //"amy"
修改configurable的特性值,一旦把该属性定义为不可配置的,就不能再把它变回配置了
在调用Object.defineProperty()方法时,如果不指定,configurable,writable,enumerable特性的默认值都是false
var person {};
Object.defineProperty(person,"name",
{configurable:false; //把configurable设置为false,表示不能从对象中删除属性
value:"amy";
});
alert(person.name); //"amy"
delete.person.name;
alert(person.name); //"amy"
③使用访问器属性的常用方式,即设置一个属性的值会导致其他属性的变化
var book={
_year:2004; 下划线_标记得属性,表示只能通过对象方法访问的属性
edition:1;
};
//定义访问器属性year,包含一个getter函数和setter函数
Object.defineProperty(book,"year",{
get:function(){
return this._year;
}
set:function(newValue){
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.edition); //2
④定义多个属性
var book={};
//定义多个属性
Object.defineProperties(book,{
_year:{value:2004}, //数据属性
edition:{value:1},
year:{ //访问器属性
get:function(){
return this._year;
},
set:function(newValue){
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
}
});
⑤读取访问器属性的特性,调用getOwnPropertyDescriptor(),这个方法可以针对任何对象——包括DOM和BOM对象
var des=Object.getOwnPropertyDescriptor(book,"_year");
alert(des.value); //2004
alert(des.configurable); //false