(六) -set的用途-实现响应式,还有给目标对象 设置值的时候,对值进行合法性的校验

set的用途-实现响应式,还有给目标对象 设置值的时候,对值进行合法性的校验

示例1:

<body>
  <script>
    var obj = {
      name: 'zs',
      age: 18
    }


    var p = new Proxy(obj, {
      get (target, key) {
        console.log(key)
        return target[key]
      },
      set (target, key, value) {
        console.log(key, value)
        if (key === 'age') {
          if ( value >= 0 && value <= 200 ) {
          } else {
              //用throw new Error()方法,这样可以停止js执行,但浏览器会显示有错误
            throw new Error('age的值不合法')
          }
        }
        target[key] = value
      }
    })

  
  </script>
</body>

页面显示为:

在这里插入图片描述

示例2:

通过代理,你可以轻松地验证向一个对象的传值。这个例子使用了 set

let validator = {
  set: function(obj, prop, value) {
    if (prop === 'age') {
      if (!Number.isInteger(value)) {
        throw new TypeError('The age is not an integer');
      }
      if (value > 200) {
        throw new RangeError('The age seems invalid');
      }
    }

    // The default behavior to store the value
    obj[prop] = value;
  }
};

let person = new Proxy({}, validator);

person.age = 100;

console.log(person.age); 
// 100

person.age = 'young'; 
// 抛出异常: Uncaught TypeError: The age is not an integer

person.age = 300; 
// 抛出异常: Uncaught RangeError: The age seems invalid
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值