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}