1、es3中
将其设为局部变量,然后采用闭包的方式set和get方法
var Person=function(){
var data={
name:"张三",
age:"18",
sex:"男"
}
this.get=function(key){
return data[key]
}
this.set=function(key,value){
return data[key]=value
}
}
var person=new Person()
console.log(person.get("name"))//张三
console.log(person.get("sex"))//男
console.log(person.get("age"))//18
console.log(person.set("name","李四"))//李四
console.log(person.set("sex","女"))//女
console.log(person.set("age","20"))//20
2、es5中的写法
采用对象下边的Object.defineProperty()方法,对属性的描述符进行操作
var person={
name:"王五",
age:"18",
sev:"男"
}
Object.defineProperty(person,"money",{
writable:false,
value:30000000
})
console.log(person.name)//王五
person.money=200000
console.log(person.money)//300000000
3、es6中的对象代理
核心代码:var person=new Proxy(需要进行代理的对象例如:Person,{
get(target,key){
return target[key]
}
set(target,key,value){
if(target[key]!=="sex){//此处可以限制某一个属性不可以被修改
return target[key]=value
}
}
}
var Person={
name:"lili",
age:"18",
sex:"女"
}
var person=new Proxy(Person,{
get(target,key){
return target[key]
},
set(target,key,value){
if(key!=="sex"){//此处规定了sex不可以修改赛事
target[key]=value
}
}
})
console.log(person.name)//lili
console.log(person.age)//18
console.log(person.sex)//女
person.name="小宝"
person.age="20"
person.sex="男"
console.log(person.name)//小宝
console.log(person.age)//20
console.log(person.sex)//女