mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-29 05:42:20 +00:00
修改Object/Proxy
This commit is contained in:
parent
ca867a9db4
commit
d814b273c8
@ -338,6 +338,38 @@ proxy.age // 抛出一个错误
|
||||
|
||||
上面代码表示,如果访问目标对象不存在的属性,会抛出一个错误。如果没有这个拦截函数,访问不存在的属性,只会返回undefined。
|
||||
|
||||
除了取值函数get,Proxy还可以设置存值函数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方法用来监听对象的变化。一旦监听对象发生变化,就会触发回调函数。
|
||||
|
Loading…
x
Reference in New Issue
Block a user