Proxy 也就是代理,可以帮助我们完成很多事情,例如对数据的处理,对构造函数的处理,对数据的验证,就是在我们访问对象前添加了一层拦截,可以过滤很多操作,而这些过滤,由你来定义。
1.语法:
let p = new Proxy(target,handler);
2.参数:
target:需要使用Proxy
包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)
handler:一个对象,其属性是当执行一个操作时定义代理的行为的函数(可以理解为某种触发器)
3.示例
let obj={
name:'dayfly',
age:100,
gender:'男'
};
let p=new Proxy(obj,{
//get用于拦截某个数据的读取操作
get(target,property){
// return '已屏蔽';
if(property==='age'){
return target[property]-80; //obj.age
}else{
return 'fail';
}
}
});
console.log(p.name);//fail
console.log(p.age);//20
console.log(p.a);//不存在的也返回 fail
示例二
{
let obj={
name:'dayfly',
age:100,
gender:'男'
};
let p=new Proxy(obj,{
//set可以拦截某个属性的赋值操作
set(target,property,value){
//阻止赋值的默认行为 return fales
if(property==='age'){
if(!Number.isInteger(value)||value>150){
throw new TypeError('年龄不合法');
}
target[property]=value;
}
}
});
p.age=200;
// console.log(p.age);//在set没赋值前,使用p.age=200,是没用的
console.log(p.name);
console.log(p.age);
}