1.property的操作属性
[[Configurable]] 可以使用delete操作删除属性 默认值为true
[[Enumerable]]是否可以用for in 循环访问该属性 默认值为true
[[Writable]] 是否可以修改属性的值 默认值为true
[[Value]] 记录该属性所代表的值。默认问undefine
[[Get]] 访问属性值调用的函数
[[Set]] 给属性赋值时读取的
1.configurable
var person = {};
Object.defineProperties(person, "name", {
configurable: false,
value: "Json"
})
将对象的name属性定义为 configurable: false后将不再能用delete操作,来删除对象的name属性。也不再能重新定义name属性。例如一下操作在严格模式下都会报错,非严格模式下会被忽略:
//删除name属性
delete person.name
//重新定义属性
Object.defineProperties(person, "name", {
configurable: true,
value: "Nicholas"
})
2.wirtable
var person = {};
Object.defineProperties(person, "name", {
writable: false,
value: "Json"
})
定义name属性为只读属性,之后便不再能修改name的值。如果尝试给那么赋值,在非严格模式下将被忽略,严格模式下将会报错。
3.get&set方法
get&set方法只能通过属性定义器定义Object.defineProperty(),
Object.defineProperty(person , "sex", {
get: function(){
return this.sex;
},
set: function(newValue){
if (newValue != "man"&& newValue != "women") {
this.sex = "unkonw"
} else {
this.sex = newValue
}
}
})
读取已有属性的特性描述
当做了以上属性定义操作后,可以使用Object.getOwnPropertyDescriptor(person, "name”)读取,person对象的name属性
Object.getOwnPropertyDescriptor(person, "name")
//{value: "Json", writable: false, enumerable: false, configurable: false}
网友评论