Object.defineProperty(obj, propName, description)
-
obj:需要被修改的对象
-
propName:相当于 对象 的属性名
-
description:当前这个对象的特性
数据描述:decsription
- value:属性的值,可以使任意值,默认为 undefined
var obj = {}
Object.defineProperty(obj, 'name',{})
Object.defineProperty(obj, 'age',{
value: 18
})
console.log(obj.name) // undefined
console.log(obj.age) // 18
- writable:属性值是否可以被重写 —— false:不可被修改 true:可以被修改
var obj = {}
Object.defineProperty(obj, 'name', {
value: '人间富贵花',
writable: true
})
obj.name = 'RJFGH'
console.log(obj.name) // RJFGH
Object.defineProperty(obj, 'age',{
value: 18,
writable: false
})
obj.age= 20
console.log(obj.age) // 18
- enumerable:是否可以被枚举 for ... in 或者 Object.keys()
var obj = {}
Object.defineProperty(obj, 'name',{
value: '人间富贵花',
enumerable: true
})
console.log(Object.keys(obj)) //[name]
Object.defineProperty(obj, 'age',{
value: 18,
enumerable: false
})
console.log(Object.keys(obj)) // [name]
- configurable:是否可以删除目标属性或者可以再次修改属性特征(writable、enumerable、configurable)
注意:这里不是修改属性值,而是属性特征
// 一:不可删除属性
var obj = {}
Object.defineProperty(obj, 'name', {
value: '人间富贵花',
writable: false,
enumerable: false,
configurable: false
})
delete obj.name // 删除属性
console.log(obj.name // 人间富贵花 删除不生效
// 二:可以删除属性
var obj = {}
Object.defineProperty(obj, 'name',{
value: '',
writable: false,
enumerable: false,
configurable: false
})
delete obj.name // 删除属性
console.log(obj.name) //undefined 删除生效
//三:不可修改属性特征
var obj = {}
Object.defineProperty(obj, 'name',{
value: '人间富贵花',
writable: false,
enumerable: false,
configurable: false // 不可修改属性特征
})
Object.defineProperty(obj, 'name',{
writabe: true // 属性特征修改无效 依旧是 false
})
obj.name = 'RJFGH' // writable: false
console.log(obj.name) // '人间富贵花'
//四:可修改属性特性
var obj = {}
Object.defineProperty(obj, 'name', {
value: '人间富贵花',
writable: false,
enumerable: false,
configurable: true // 可修改属性特征
})
Object.defineProperty(obj, 'name',{
writable: true // 属性特征修改成功
})
obj.name = 'RJFGH' // writable: true
console.log(obj.name) // RJFGH
属性特征小结:
- value:设置属性的值
- writable:属性值是否可以被修改 【 false | true 】
- enumerable: 目标属性是否可被枚举 【false | true】
- configurable:目标属性是否可以被删除、是否可以再次修改属性特征 【false | true】