<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>回顾Object.defineproperty方法</title>
</head>
<body>
<script type="text/javascript">
let person ={
name:'jack',
sex:'男'
}
let num =18;
Object.defineProperty(person,'age',{
value:18,
enumerable:true,//控制属性是否可枚举,默认值是false
writable:true,//控制属性是否可以被修改,默认值为false
configurable:true,//控制属性是否可以被删除,默认为false
//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值。
get(){
console.log('有人读取了age值');
return num;
},
//当有人修改person的age的属性值时,set函数(setter)就会被调用。且会收到修改的具体值。
set(value){
console.log('有人修改了age值');
num = value;
}
})
console.log(person);
console.log(Object.keys(person));
</script>
</body>
</html>
打印出来可以看到和其他两个属性的颜色不一样,表示不可枚举,就是不可遍历,使用循环,无法获取到age。
知识点:
1:Object.defineProperty,定义一个对象的属性。参数:1对象名,2要定义的属性名,3属性的一些特性。
2:第三个参数:包含:
value:属性的值
enumerable:控制属性值是否可枚举,默认值时false
writable:控制属性值是否可以被修改,默认值为false
configurable:控制属性是否可以被删除,默认值为false
get:当有人读取定义的属性值时,getter就会被调用,返回值,就是属性的值。
set:当有人修改定义的属性值时,setter就会被调用,且会收到修改的具体值。