一、概念
Proxy 是一种构造器,所以是通过new关键字实现的,从功能上讲,也是一种拦截器,在设置对象属性或者读取对象属性时做一层拦截操作。
二、参数说明
new Proxy(target,handler) 第一个参数 target 为原始对象,第二个参数 handler 为需要做拦截操作的 get 和 set 方法对象。get 和 set 方法有四个参数 get(target,key,value,proxy),分别为目标对象,键,值,实例对象本身。
var obj = new Proxy({name:'wxp'},{
get(target,key,value,proxy){console.log(2)},
set(target,key,value,proxy){console.log(3)}
});
obj.name = 1;//当设置对象属性值,打印3
obj.name;//当获取对象,打印2
三、应用场景
1.对 set 做拦截,比如规定设置属性值时必须符合某个要求。
//设置属性 point 必须是小于0的数字。
var obj = new Proxy({},{
get(target,key,value,proxy){},
set(target,key,value,proxy){if(value<0){throw new Error('The value seems invalid');}}
});
obj.point = -1;//报错
2.对 get 做拦截,比如没有某个属性的时候报错。
//没有 point 属性的时候报错。
var obj = new Proxy({point: 2}, {
get(target, key, value, proxy){
for (var pro in target) {
if (target[pro]) {
return target[pro]
}
else {
throw new Error('The value seems invalid')
}
}},
set(target, key, value, proxy){}
})
;
obj.age //报错,没有age这个属性