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; // 表示成功 return true; } }; 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
时间: 2024-02-10 16:24:52 浏览: 23
这段代码使用了 Proxy 对象来对属性的赋值进行拦截和自定义验证。在这个例子中,validator 对象定义了一个 set 方法,用于拦截对象的属性赋值操作。
当我们给 person 对象的属性赋值时,set 方法会被调用。在这个例子中,我们对属性名为 'age' 的赋值进行了自定义验证。如果赋值不符合要求,则抛出相应的异常,否则将值存储到对象中。
首先,我们创建了一个空对象 person,并使用 Proxy 对象将其包装起来。然后,我们给 person 对象的属性 age 赋值为 100,并打印出它的值。由于赋值符合要求,所以打印出的结果是 100。
接着,我们给 person 对象的属性 age 赋值为字符串 'young'。由于字符串不是一个整数,所以赋值不符合要求,会抛出一个类型错误的异常,错误消息为 'The age is not an integer'。
最后,我们给 person 对象的属性 age 赋值为 300。由于赋值超过了允许的范围,所以会抛出一个范围错误的异常,错误消息为 'The age seems invalid'。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)