美文网首页
ES6 Proxy简单探究

ES6 Proxy简单探究

作者: 弱冠而不立 | 来源:发表于2020-09-14 20:39 被阅读0次

Proxy 概念

proxy 在目标对象外层搭建了一层拦截,外界对目标对象的某些操作,必须通过这层拦截

语法:let proxy = new Proxy(target, handler)

参数 target 表示的是要监听的对象;参数handler 是一个捕捉器对象,里面有各种属性来捕捉触发事件,例如 set:function 是对象中属性被赋值时触发,get:function 是对象中属性被读取时触发。

样例

    let obj = {
        name: "target"
    };
    let handler = {
        get: function(target, key) {
            console.log(`${key} 被读取`);
            return target[key];
        },
        set: function(target, key, value) {
            console.log(`${key} 被设置为 ${value}`);
            target[key] = value;
            return target[key];
        }
    }
    let proxy = new Proxy(obj,handler);
    console.log(proxy.name);
    console.log(proxy.name = "set-target");
当 name 被读取时,被捕捉到,打印出一段话同时返回 name 对应的值。当 name 被设置时打印出一段话同时返回新设置的值

同理,不单单是 console 一句话,我们还可以对一些操作进行过滤或者拦截,例如:

    let obj = {
        name: "target",
        password: "t-pass"
    };
    let handler = {
        get: function(target, key) {
            console.log(`${key} 被读取`);
            if(key == "password") {
                return "您没有读取的权限"
            } else {
                return target[key];
            }
            
        },
    }
    let proxy = new Proxy(obj,handler);
    console.log(proxy.name);
    console.log(proxy.password);
当想获取 password 属性时,直接在判断中驳回

总结

proxy 字面意思为代理,计算机网络中常用的词汇。在 ES6 中,它的主要功能就是对一个对象进行监听守卫,当操作该对象时,会触发 handler 这个监听对象中的属性方法,在 handler 对象中,我们可以统一对这些触发进行监听然后控制。(不仅仅是读取属性或者修改属性值,其他详细的方法,可以参考官方文档,这里只是简单实验一下用法)

相关文章

网友评论

      本文标题:ES6 Proxy简单探究

      本文链接:https://www.haomeiwen.com/subject/reosektx.html