美文网首页前端学习
ES6中利用神器Proxy实现私有变量.md

ES6中利用神器Proxy实现私有变量.md

作者: 傲娇的泰迪 | 来源:发表于2018-06-19 15:43 被阅读0次

    先上代码:

    const protectHandler = {    //此为定义Proxy的第二个参数,劫持原对象的get和set方法
        get (target, key) {    //target为目标对象, key为成员变量
            isProtected(key, 'get');    //调用isProtected判断是否合法
            return target[key];    //如果合法会运行此步,返回目标对象中的成员变量
        },
        set (target, key, value) {    //value为要给成员变量设置的值
            isProtected(key, 'set');
            target[key] = value;    //如果合法会运行此步,设置变量值为value
            return true;    //成功返回true
    };
    function isProtected (key, action) {    //判断是否合法的函数
        if (key[0] === '_') {    //规定:如果成员变量名以"_"开头,就视为私有的,抛出异常阻止操作
            throw new Error(`Invalid attempt to ${action} private "${key}" property`);
        }
    }
    const yourObj = new Student();    //实例化一个对象
    const myObj = new Proxy(yourObj, protectHandler);//给yourObj对象添加protectHandler劫持,
                                                     //在set和get时遇到以"_"开头的私有变量名就报错
    

    解释:

    Proxy(target, handler)
    target指的是你实例化的一个类,handler是你定义的劫持规则
    const myObj = new Proxy(target, handler)
    此时对myObj的get,set操作相当于先通过handler,再作用到target上
    在此例中,相当于先判断你要操作的变量是不是内部变量,如果是就禁止操作。
    

    相关文章

      网友评论

        本文标题:ES6中利用神器Proxy实现私有变量.md

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