回顾Object.defineproperty方法
Object.defineproperty方法的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
写法:Object.defineproperty(obj, prop, desc)
1) 第一个参数obj,在哪个对象身上添加或者修改属性
2) 第二个参数prop,添加或修改的属性名
3) 第三个参数desc,配置项
通过Object.defineproperty方法添加的新属性,默认是不可枚举的,也就是说对象中的该属性无法被遍历出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>回顾Object.defineproperty</title>
</head>
<body>
<script type="text/javascript">
// 声明对象类型变量
let person = {
name:"马铃薯",
sex:"男"
}
// Object.defineproperty方法的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
Object.defineProperty(person,"age",{
value:26
})
console.log(person)
for(let index in person){
console.log("@",person[index])
}
</script>
</body>
</html>

通过修改enumerable、writable、configurable属性值,可以分别控制属性是否可以被枚举、被修改以及被删除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>回顾Object.defineproperty</title>
</head>
<body>
<script type="text/javascript">
// 声明对象类型变量
let person = {
name:"马铃薯",
sex:"男"
}
// Object.defineproperty方法的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
Object.defineProperty(person,"age",{
value:26,
// 控制属性是否可以枚举,默认值为false
enumerable:true,
// 控制属性是否可以被修改,默认值为false
writable:true,
// 控制属性是否可以被删除,默认值为false
configurable:true
})
console.log(person)
for(let index in person){
console.log("@",person[index])
}
</script>
</body>
</html>

声明一个数值类型变量number,通过Object.defineproperty方法获取和修改number值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>回顾Object.defineproperty</title>
</head>
<body>
<script type="text/javascript">
// 声明数值类型变量
let number = 100
// 声明对象类型变量
let person = {
name:"马铃薯",
sex:"男"
}
// Object.defineproperty方法的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
Object.defineProperty(person,"age",{
// value:26,
// // 控制属性是否可以枚举,默认值为false
// enumerable:true,
// // 控制属性是否可以被修改,默认值为false
// writable:true,
// // 控制属性是否可以被删除,默认值为false
// configurable:true,
// 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
get(){
console.log("正在读取age属性")
return number
},
// 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
set(value){
console.log("正在修改age属性,且值是",value)
number = value
}
})
console.log(person)
for(let index in person){
console.log("@",person[index])
}
</script>
</body>
</html>
