ES6 对象代理 Proxy 数据保护

本文介绍了ES中数据保护的不同实现方式,包括ES3中的私有变量保护、ES5中的不可写属性设置以及ES6中使用代理对象进行数据访问控制的方法。通过这些技术,可以有效地控制对象属性的读写权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子:
var user= new proxy({},{
get:function(obj,prop){
if(prop=='full_name')
return obj.fname+' '+obj.lname;
},
set:function(obj,prop){

}
}
);
user.fname='Bob';
user.lname='wood';
console.log("user.full_name:",user.full_name)

{//ES3,ES5 数据保护
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'){
data[key]=value;
}
}
}
//声明一个实例
var person= new Person();
//读取
console.table({
name:person.get('name'),sex:person.get('sex'),age:person.get('age')
});
//修改
person.set('name','es3-cname');
person.set('set','female');//无法修改,sex有数据保护。
}

{//ES5
var Person ={
name:'es5',
age:15
};
Object.defineProperty(Person,'sex',{
writable:false,
value:'male'
});
}
{//ES6对象代理,用户访问的不是真正的数据,是被代理后的对象。
let Person = {
name:'es6',
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;
}
}

});
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值