属性类型
数据属性
- Configurable:能否通过delete删除属性从而重新定义属性;能否修改,或者能否把属性修改为访问器属性
- Enumberable:能否通过for-in循环返回属性
- Writable:能否修改属性的值
- Value:包含这个属性的数据
直接在对象上定义属性,默认值都为true
修改默认属性的方法:
Object.defineProperty()
在调用Object.defineProperty(),如果不指定,Configurable,Enumberable,Writable默认值都为false
var person={};
Object.defineProperty(
person,"name",{
writable:false,
value"Nack"
}
);
alert(person.name); //Nack
person.name="Grey";
alert(person.name); //Nack
访问器属性
- Configurable:能否通过delete删除属性从而重新定义属性;能否修改,或者能否把属性修改为访问器属性
- Enumberable:能否通过for-in循环返回属性
- Get:读取属性是调用的函数,默认值:undefined
- Set:写入,默认值:undefined
var book={
_year:2004,
edition:1
};
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
定义多个属性:Object.defineProperties()
读取属性特性
Object.getOwnPropertyDescription()
接受两个参数:属性所在的对象,要读取其描述符的属性名称
var descriptor=Object.getOwnPropertyDescriptor(book,"_year");
alert(descriptor.value);
alert(descriptor.configurable);