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

2018-06-09  本文已影响0人  罂粟1995

学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,这种方式可以在代理层中定义很多逻辑复杂的拦截规则,但是不会影响原始对象数据,是个很好的方法。

上一篇 下一篇

猜你喜欢

热点阅读