美文网首页
对象代理(数据隐私保护)

对象代理(数据隐私保护)

作者: 罂粟1995 | 来源:发表于2018-06-09 20:25 被阅读0次

    学c++和java的时候,我们都可以快速方便地定义私有属性,但在js里面要定义私有属性就比较麻烦了。

    es5中可以依靠Object.defineProperty()这个方法定义私有属性。

             var Person = {
                name:'haha',
                age:15
              }
    
              Object.defineProperty(Person,'sex',{
                writable:false,//设为只读
                value:'male'
              });
    
              try{
                Person.sex = 'female';
                console.log(Person.sex);//sex属性还是male,并没有被改掉
              }catch(e){
                console.log(e);
              }
    

    在es6中我们可以使用对象代理,中间加个代理层来定义私有属性。

             let Person = {
                name:'haha',
                sex:'male',
                age:15
              };
    
              let person = new Proxy(Person,{
                get(target,key){
                  return target[key]
                },
                set(target,key,value){
                  if(key!=='sex'){
                    target[key]=value;
                  }
                }
              });
    
              try{
                person.sex = 'female';
                console.log(Person.sex);//sex属性还是male,并没有被改掉
              }catch(e){
                console.log(e);
              }
    

    Proxy是es6提供的新方法。
    使用代理的方式,用户操作的其实是person,而不是Person,这种方式可以在代理层中定义很多逻辑复杂的拦截规则,但是不会影响原始对象数据,是个很好的方法。

    相关文章

      网友评论

          本文标题:对象代理(数据隐私保护)

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