1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-29 05:42:20 +00:00

修改Object/Proxy

This commit is contained in:
ruanyf 2014-08-26 12:41:56 +08:00
parent ca867a9db4
commit d814b273c8

View File

@ -338,6 +338,38 @@ proxy.age // 抛出一个错误
上面代码表示如果访问目标对象不存在的属性会抛出一个错误。如果没有这个拦截函数访问不存在的属性只会返回undefined。
除了取值函数getProxy还可以设置存值函数set用来拦截某个属性的赋值行为。假定Person对象有一个age属性该属性应该是一个不大于200的整数那么可以使用Proxy对象保证age的属性值符合要求。
```javascript
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');
}
}
// 对于age以外的属性直接保存
obj[prop] = value;
}
};
let person = new Proxy({}, validator);
person.age = 100;
person.age // 100
person.age = 'young' // 报错
person.age = 300 // 报错
```
上面代码中由于设置了存值函数set任何不符合要求的age属性赋值都会抛出一个错误。
## Object.observe()Object.unobserve()
Object.observe方法用来监听对象的变化。一旦监听对象发生变化就会触发回调函数。