Proxy

112 阅读1分钟

Proxy就是对指定的对象的相关操作进行拦截,然后通过get和set进行后续处理。

参数:

const p = new Proxy(target, handler)

target :

要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

handler :

一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时,代理 p 的行为。

    //声明一个名为obj的对象
    var obj = {
        name: "ZHouMao",
        age: 18
    }
 
    //示例化一个代理p,代理的对象是obj
    var p = new Proxy(obj, {
        //get 属性读取时的操作
        get(target, prop) {
            //target 就是 obj 这个对象
            //prop 是 obj 的属性名
            if (prop in target) {
                //如果该属性名存在与该对象中,则返回该属性值
                return target[prop];
            } else {
                //否则返回字符串 "该对象没有该属性"
                return "该对象没有该属性";
            }
        },
        //set 属性设置时的操作
        set(target, prop, value) {
            //target 就是 obj 这个对象
            //prop 是 obj 的属性名
            //value 是 要设置的值
            if (prop === "age") {
                //如果该属性名是age,则返回修改后的值
                target[prop] = value;
            } else {
                //否则弹出异常内容
                throw "除年龄外,其它属性不可以更改";
            }
        }
    })