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