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);
}
 
posted on 2021-11-30 18:29  卡坦菲  阅读(208)  评论(0编辑  收藏  举报