<!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 number = 18;
let person = {
name: "张三",
sex: "男"
}
Object.defineProperty(
person, // 指定添加属性的 json 对象
"age", // 指定添加属性的名称
{ // 指定添加属性配置项
// value: 18, // 设置值,不能和 get、set 配置同时使用
// writable: true, // 控制属性是否可修改,默认 false,不能和 get、set 配置同时使用
enumerable: true, // 控制属性是否可枚举(遍历),默认 false
configurable: true, // 控制属性是否可删除,默认 false
get:function() { // 简写:get(){},当有人读取 person 对象的 age 属性时,get 函数(getter)就会被调用,且返回的值就是 age 的值
console.log("调用 getter 函数");
return number;
},
set:function(value) { // 简写:set(value){},当有人修改 person 对象的 age 属性时,set 函数(setter)就会被调用,且会修改 age 的值
// 注意,如果 age 属性的 getter 函数读取的是其他变量,那么需要修改被读取的变量
console.log("调用 setter 函数");
number = value;
}
}
);
console.log(person);
</script>
</body>
</html>