Object.defineProperty()的介绍
寄存器getter和sette
目录
Object.defineProperty()的介绍
Object.defineProperty()
---静态方法会直接在一个对象上定义一个新属性,或修改其现有属性,并返回此对象。
Object.defineProperty(obj, prop, descriptor)
value:被定义属性的值
writable:为true,则可修改被定义属性的值,为false,则不可修改被定义属性的值。默认值为 false
。
let object = {
name: '李白'
}
Object.defineProperty(object,'age',{
value:18,
})
console.log(object.age) //18
object.age = 20
console.log(object.age) //18
let object = {
name: '李白',
writable:true
}
Object.defineProperty(object,'age',{
value:18,
})
console.log(object.age) //18
object.age = 20
console.log(object.age) //20
enumerable:为true,则可被枚举(使用for...in或Object.keys(),为false,则不可被枚举。默认值为 false
。
let object = {
name: '李白'
}
Object.defineProperty(object,'age',{
value:18,
writable:true,
//enumerable:true,
})
let result = Object.keys(object)
console.log(result) //['name']
let object = {
name: '李白'
}
Object.defineProperty(object,'age',{
value:18,
writable:true,
enumerable:true,
})
let result = Object.keys(object)
console.log(result) //['name','age']
configurable:是否可以删除被定义的属性或是否可以修改属性的特性(writable,configurable)
let object = {
name: '李白'
}
Object.defineProperty(object,'age',{
value:18,
writable:true,
enumerable:true,
//configurable:true,
})
delete object.age
console.log(object) //{name:'李白',age:'18'}
let object = {
name: '李白'
}
Object.defineProperty(object,'age',{
value:18,
writable:true,
enumerable:true,
configurable:true,
})
delete object.age
console.log(object) //{name:'李白'}
寄存器getter和sette
getter:当访问该属性时,该方法会被执行。函数的返回值会作为该属性的值返回。
setter:当属性值修改时,该方法会被执行。该方法将接受唯一参数,即该属性新的参数值。
let object = {
name: '李白'
}
let val=18;
Object.defineProperty(object,'age',{
get(){
return val;
},
set(value){
val = value
}
})
console.log(object.age) //18
object.age = 20;
console.log(object.age) //20
为了满足好奇心,我也尝试了给他们分别注掉
let object = {
name: '李白'
}
let val=18;
Object.defineProperty(object,'age',{
// get(){
// return val;
// },
set(value){
val = value
}
})
console.log(object.age) //undefined
object.age = 20;
console.log(object.age) //undefined
let object = {
name: '李白'
}
let val=18;
Object.defineProperty(object,'age',{
get(){
return val;
},
// set(value){
// val = value
// }
})
console.log(object.age) //18
object.age = 20;
console.log(object.age) //18