总览
let peson = {}
let temp = null
Object.defineProperty(peson,'name',{
value:'tom', //描述属性值
writable: true,// 描述属性值是否可以改变,默认为false
get:function(){},// 描述属性值的getter方法,默认为undefined
set:function(val){}, //描述属性值的setter方法,默认为undefined
configurable: true, //描述属性是否配置,以及可否删除,默认为false
enumerable:true,// 描述属性是否会出现在for in 或者 Object.keys()的遍历中,默认为false
})
writable属性
描述属性值是否可以改变,默认为false。
Object.defineProperty(peson,'name', {
value:'tom',
})
console.log(peson.name)//tom
//重新配置
Object.defineProperty(peson,'name',{
value:'li',
})
// 代码报错Cannot redefine property: name at Function.defineProperty
peson.name = 'li'
console.log(peson.name)//tom
//writable为ture,不管configurable为true还是false属性都可以改变赋值
Object.defineProperty(peson,'name',{
value:'tom',
writable: true
})
console.log(peson.name)//tom
//重新配置
Object.defineProperty(peson,'name',{
value:'lisa',
writable: true
})
console.log(peson.name)//lisa
peson.name = 'li'
console.log(peson.name)//li
get和set
描述属性赋值和取值方法,默认为undefined。
Object.defineProperty(peson,'name',{
get:function(){
return temp
},
set:function(val){
temp = val
},
})
peson.name = 'li'
console.log(peson.name)//li
configurable
描述属性是否配置,以及可否删除,默认为false
Object.defineProperty(peson,'name',{
value:'tom',
})
//重新配置
Object.defineProperty(peson,'name',{
value:'li',
})
//代码报错Cannot redefine property: name at Function.defineProperty
delete peson.name //Cannot delete property 'name' of #<object>
//configurable为ture,不管writable为true还是false属性都可以改变赋值
Object.defineProperty(peson,'name',{
value:'tom',
configurable:true,
})
//重新配置
Object.defineProperty(peson,'name',{
value:'li',
})
console.log(peson.name)//li
delete peson.name
console.log(peson.name)//undefined
enumerable属性
描述属性是否会出现在for in 或者 Object.keys()的遍历中,默认为false
Obiect.defineProperty (peson, "name ,{
value: "tom",
enumerable: true,
});
peson.sex ="1";
Object. defineProperty(peson, "age",{
value: 13,
enumerable: false,
});
console.1og(object.keys(peson));//["name","sex"]
for(let key in peson){
console.1og(key)//name,sex
}
跟直接赋值区别
1
peson.name = 'jie'
等价于
Object.defineProperty(peson,'name',{
value:'jie',
writable: true,
configurable: true,
enumerable:true,
})
2
Object.defineProperty(peson,'name',{
value:'jie',
})
等价于
Object.defineProperty(peson,'name',{
value:'jie',
writable: false,
configurable: false,
enumerable:false,
})