File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Original file line number Diff line number Diff 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
343375Object.observe方法用来监听对象的变化。一旦监听对象发生变化,就会触发回调函数。
You can’t perform that action at this time.
0 commit comments