let obj ={a:1,b:2}
Object.defineProperty(obj,'a',{//对obj中的a 设置value:10,//设置值writable:false,//不可重写enumerable:false,//不可遍历configurable:true,//属性描述符是否还能再修改})for(var key in obj){
console.log('遍历obj',key)//输出: 遍历obj b}
obj.a =1
console.log(obj.a)// 输出:10
二:函数
let Stu ={};
Object.defineProperty(Stu,'a',{get:()=>{//Stu.a 时会运行
console.log('获取Stu中的a,就会运行这个函数')},set:(val)=>{//给Sut中的 a 赋值 时会运行
console.log('给Stu的a赋值,就会执行这个函数,需要赋的值为'+ val)}})
三、案例
let Stu ={};let temporaryVal =0;//防止递归
Object.defineProperty(Stu,'a',{get:()=>{return temporaryVal
},set:(val)=>{//可以抛出错误提醒,拒绝重新赋值,这样下面的代码就不会运行了//throw new Error('不能给a这个属性赋值')
console.log('给Stu的a赋值,就会执行这个函数,需要赋的值为'+ val)
temporaryVal = val
}})
Stu.a =2
console.log(Stu.a )// 输出:2