getter_setter

访问器属性: 不实际存储属性值
专门对其它属性提供验证保护
何时: 只要按照自定义规则保护属性
如何: 也有四大特性:
   {
      get:function(){return 受保护的属性值},
  set:function(val){
  验证要赋的新值val
  验证通过才将val保存到受保护的属性中
  },
    enumerable:true/false,
    configurable:true/false,
  }  
当通过访问器属性获取受保护的属性值时
自动调用get方法
当通过访问器属性为受保护的属性赋值时
自动调用set方法
参数val,自动获得要赋的新值
大问题: 受保护的属性值应该保存在哪儿?
才能做到比人不能直接用,只能通过访问器属性访问
解决: 闭包!


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var eric={
id:1001,
ename:"Eric"
};
+function(){
var _age;
Object.defineProperty(eric,"age",{
get:function () {
return _age;
},
set:function (val) {//val自动获取要赋的新值
if (val>=18&&val<=65)
_age=val;
else
throw new RangeError("年龄必须介于18-65之间");
}
})
}();
// eric.age=10;//当试图给访问器属性赋值时,会自动调用set方法
eric.age=26;
console.log(eric.age);
eric._age=0;
console.log(eric.age);
</script>
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/sske531549304/p/9374043.html