封装一段数据,但是一些属性只想要内部api调用,外部不可以调用,以此来保护数据。
es3 通过闭包实现
var person = function () {
var people = {
name:'rain',
worker:'coder',
};
this.get = function (key) {
return people[key];
};
this.set = function (key,val){
people[key] = val;
};
}
var man = new people();
console.log(man.get('name')) // raines5 官方案例 Object.defineProperty
var obj = {};
var description = Object.create(null);
description.value = 'static';
Object.defineProperty(obj,'key',description);
Object.defineProperty(obj,'key',{
enumerable:false,
configurable:false,
writable:false,
value:'static'
})对象中仍然是原始值。
es6
var six = {
name:"我是six",
worker:"我是程序员",
}
var seven = new Proxy (six,{
get (target,key){
return target[key]
},
set (target,key,val){
target[key] = val;
},
});
console.log(seven.name); // 我是six
seven.name = '新的名字';
console.log(seven.name); // 新的名字
Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)
new Proxy(target, handler)target
用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)
handler一个对象,其属性是当执行一个操作时定义代理的行为的函数。