代碼會說話:
{//es3數(shù)據(jù)保護
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數(shù)據(jù)保護 即只讀效果
var Person={
name:'es5',
age:15,
}
Object.defineProperty(Person,'sex',{//會直接在一個對象上定義一個新屬性寒屯,或者修改一個對象的現(xiàn)有屬性 并返回這個對象
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{//出問題時不耽誤下面的執(zhí)行
Person.sex='female';
? ? console.table({name:Person.name,age:Person.age,sex:Person.sex});
} catch(e){
console.log(e);
} finally {
}
}
{//es6數(shù)據(jù)保護 對象代理 放在中間層去寫 程序的可控性強
let Person={
name: 'es6',
age: 15,
sex:'male'
};
let person=new Proxy(Person,{//person是暴露給用戶操作的對象 把上面的Person保護起來 以后操作的是person 中間代理摧玫; Proxy方法傳入的大Person是被代理者 Proxy的意思也是將person和Person聯(lián)系起來 以后所有的限制都可以放在這個中間層來做
get(target,key){//這個get方法類似es5中的getter和setter 讀取操作 target指的是person? key參數(shù)是對象里的屬性
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
}
?整理以自鑒 不喜請補充~ 嗯嘛