例子:
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;
}
}
});
}