数据属性
- configurable:能否使用delete删除属性而重新定义新的属性、能否修改属性特性、能否修改访问器属性;默认值为false(false为不可重新定义)。
- enumerable:表示能否通过for-in循环返回属性;默认值为true,false为不可修改。
- writable:能否修改属性的值;默认值为true,false为不可修改。
- value:属性的数据值;默认值为undefined。
var person={};
Object.defineProperty(person,'name',{
configurable:false,
enumerable:false,
writable:false,
value:"Nico "
});
console.log(person);//Nico,默认value
//writable(属性定义为flase)
person.name="Jone";
console.log(person);//Nico,无法修改value
//enumerable(false时不可循环)
for(var i in person){
console.log(person[i]) //无结果,不可循环
}
//configurable(false为不可重新定义)
delete person.name
console.log(person.name)//Nico,不可删除
Object.defineProperty(person,'name',{
configurable:true, //不可修改,将抛出错误
value:"Nico"
});
访问器属性
-
configurable和enumerable数据属性的定义相同。
-
getter:读取属性时调用的函数,默认值undefined。
-
setter:写入属性时调用的函数,默认值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
}
}
});
console.log(book.year)//2004
book.year = 2006;
console.log(book.year)//2006
console.log(book.edition)//3