关于 js 的访问器属性

访问器属性

访问器属性是为了解决:开关的保护是死板的,不灵活的,法用自定义规则保护属性,注意:每个数据属性的缩微对象中都包含四个属性:

  • value: 属性值 实际存储属性值
  • writable: true/false 控制是否可修改当前属性的值
  • enumerable: true/false 控制是否可被for in遍历到该属性的值——半隐藏
  • configurable: true/false 控制是否可删除该属性 ,控制是否可修改前两个开关

访问器属性的代码如下:

//创建一个对象
var lilei = {
  uname: "zhang",
  uage: "25",
  salary: 25000,
}
//调用函数
Object.defineProperties(lilei, {
  _uage: {
    value: lilei.uage,
    writable: true,
    enumerable: false,//这边默认的就是半隐藏的,遍历不到,如果想遍历到,必须将开关改为true
    configureable: false,
  },
  uage: {
    get: function () {
      return this._uage;
    },
    set: function (value) {
      if (value > 18 && value < 65) {
        this._uage = value;
      } else {
        console.log(`不能修改`);
        throw Error("年纪超出范围")
      }
    },
    enumerable: false,
    configurable: false,
  },
})
lilei.uage = 30;
console.log(lilei.uage)
console.log(lilei)
for (var key in lilei) {
  console.log(lilei[key])
}
  • 这里面的 getset 函数(名字不可更改,此处为定义好的函数),是对象直接调用的,且都是半隐藏属性,需要注意的是,这里添加的 _uage 属性,也是半隐藏的,是遍历不到的,但是可以通过点属性,访问到;
  • 当试图获取 uage 的值时,自动调用 get() ,由于是对象直接调用,所以,this 指向对象本身;
    当试图修改 uage 的值时,自动调用 set(),将实参传入,进行判断,不符合则报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值