使用Object.defineProperty()修改某个对象的数据属性默认特性
1.使用Object.defineProperty()修改属性默认的特性
var person={};
Object.defineProperty(person,"name",{
writable:false,
value:"Nicholas"
});
console.log(person.name);//Nicholas
person.name="Greg";//writable设置为false,表示不能修改属性的值。
console.log(person.name);//Nicholas
var array1=new Array("red","yellow","blue");
var person={
name:"Nicholas",
age:29,
job:"SoftWare Engineer",
array:array1,
sayName:function(){
console.log(this.name);
},
sayArray:function(){
console.log(this.array);
}
}
Object.defineProperty(person,"name",{
configurable:false,
value:"Greg"
});
console.log(person.name);//Greg
delete person.name;//configurable设置为false,所以不能通过delete删除属性从而重新定义属性
console.log(person.name);//Greg
2.一旦把属性定义为不可配置的,就不能再把它变回可配置的。此时,再调用Object.defineProperty()方法修改除writable之外的特性(也可以修改value值),都会导致错误:
var array1=new Array("red","yellow","blue");
var person={
name:"Nicholas",
age:29,
job:"SoftWare Engineer",
array:array1,
sayName:function(){
console.log(this.name);
},
sayArray:function(){
console.log(this.array);
}
}
Object.defineProperty(person,"name",{
configurable:false,
value:"Greg"
});
Object.defineProperty(person,"name",{
configurable:true,
value:"Nicholas"
});//抛错
Object.defineProperty(person,"name",{
enumerable:false
});//抛错
Object.defineProperty(person,"name",{
writable:false,
value:"Green"
});
console.log(person.name);//Green
person.name="Greg";
console.log(person.name);//Green
Object.defineProperty(person,"name",{
writable:true,
value:"Green"
});
console.log(person.name);//Green
person.name="Greg";
console.log(person.name);//Greg
Object.defineProperty(person,"name",{
value:"GGGG"
});
console.log(person.name);//GGGG
3.使用defineProperty()方法创建一个新的属性时,如果不指定,configurable、enumerable、writable特性的默认值都是false。如果只是修改已定义的属性的特性,则无此限制。
var array1=new Array("red","yellow","blue");
var person={
name:"Nicholas",
age:29,
job:"SoftWare Engineer",
array:array1,
sayName:function(){
console.log(this.name);
},
sayArray:function(){
console.log(this.array);
}
}
Object.defineProperty(person,"happy",{
value:"I am happy"
});
console.log(person.happy);//I am happy
person.happy="you are happy";
console.log(person.happy);//I am happy
for(var prop in person){
console.log(prop);
}
/*
name
age
job
array
sayName
sayArray
*/
Object.defineProperty(person,"happy",{
configurable:true
})//抛错,TypeError: Cannot redefine property: happy
Object.defineProperty(person,"happy",{
value:"you are happy"
});//抛错,TypeError: Cannot redefine property: happy