Skip to content

Commit d814b27

Browse files
committed
修改Object/Proxy
1 parent ca867a9 commit d814b27

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

docs/object.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,38 @@ proxy.age // 抛出一个错误
338338

339339
上面代码表示,如果访问目标对象不存在的属性,会抛出一个错误。如果没有这个拦截函数,访问不存在的属性,只会返回undefined。
340340

341+
除了取值函数get,Proxy还可以设置存值函数set,用来拦截某个属性的赋值行为。假定Person对象有一个age属性,该属性应该是一个不大于200的整数,那么可以使用Proxy对象保证age的属性值符合要求。
342+
343+
```javascript
344+
345+
let validator = {
346+
set: function(obj, prop, value) {
347+
if (prop === 'age') {
348+
if (!Number.isInteger(value)) {
349+
throw new TypeError('The age is not an integer');
350+
}
351+
if (value > 200) {
352+
throw new RangeError('The age seems invalid');
353+
}
354+
}
355+
356+
// 对于age以外的属性,直接保存
357+
obj[prop] = value;
358+
}
359+
};
360+
361+
let person = new Proxy({}, validator);
362+
363+
person.age = 100;
364+
365+
person.age // 100
366+
person.age = 'young' // 报错
367+
person.age = 300 // 报错
368+
369+
```
370+
371+
上面代码中,由于设置了存值函数set,任何不符合要求的age属性赋值,都会抛出一个错误。
372+
341373
## Object.observe(),Object.unobserve()
342374

343375
Object.observe方法用来监听对象的变化。一旦监听对象发生变化,就会触发回调函数。

0 commit comments

Comments
 (0)