美文网首页
e6数据保护

e6数据保护

作者: 木鱼儿猴子 | 来源:发表于2018-04-11 15:48 被阅读0次

代码会说话:

{//es3数据保护

var Person=function(){

var data={

name:'es3',

sex:'male',

age:15

}

this.get=function(key){

return data[key];

}

this.set=function(key,value) {

if(key!=='sex'){

return data[key]=value

}

}

}

//声明一个实例

var person=new Person();

//读取

console.table({name:person.get('name'),sex:person.get('sex'),age:person.get('age')});//es3,male,15

//修改name

person.set('name','es3-cname');

console.table({name:person.get('name'),sex:person.get('sex'),age:person.get('age')});//es3-cname,male,15

//修改sex 修改不了

person.set('sex','female');

console.table({name:person.get('name'),sex:person.get('sex'),age:person.get('age')});//es3,male,15

}

{//es5数据保护 即只读效果

var Person={

name:'es5',

age:15,

}

Object.defineProperty(Person,'sex',{//会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性 并返回这个对象

writable:false,//只读起到保护作用

value:'male'

});

console.table({name:Person.name,age:Person.age,sex:Person.sex});//es5 15 male

Person.name='es5-cname';

console.table({name:Person.name,age:Person.age,sex:Person.sex});//只读属性修改无效 es5-cname 15 male

Person.sex='female';

console.table({a:1,name:Person.name,age:Person.age,sex:Person.sex});//只读属性修改无效 es5 15 male

try{//出问题时不耽误下面的执行

Person.sex='female';

    console.table({name:Person.name,age:Person.age,sex:Person.sex});

} catch(e){

console.log(e);

} finally {

}

}

{//es6数据保护 对象代理 放在中间层去写 程序的可控性强

let Person={

name: 'es6',

age: 15,

sex:'male'

};

let person=new Proxy(Person,{//person是暴露给用户操作的对象 把上面的Person保护起来 以后操作的是person 中间代理; Proxy方法传入的大Person是被代理者 Proxy的意思也是将person和Person联系起来 以后所有的限制都可以放在这个中间层来做

get(target,key){//这个get方法类似es5中的getter和setter 读取操作 target指的是person  key参数是对象里的属性

return target[key]

},

set(target,key,value){

if(key!=='sex'){

target[key]=value;

}

}

})

console.table({name:Person.name,age:Person.age,sex:Person.sex})//es6 15 male

try{

person.sex='female';

person.name='es6-cname';

} catch (e){

console.log(e);

} finally {

}

console.log({name:person.name,age:person.age,sex:person.sex})//es6-cname 15 male

console.log({name:Person.name,age:Person.age,sex:Person.sex})//es6-cname 15 male

}

 整理以自鉴 不喜请补充~ 嗯嘛

相关文章

网友评论

      本文标题:e6数据保护

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