es5实现:
let obj = {
name: "战三",
age: "dddd",
fo: "test",
};
Object.keys(obj).forEach((key) => {
var value = obj[key];
Object.defineProperty(obj, key, {
get: function () {
console.log(`${key}被访问了`);
return value;
},
set: function (newValue) {
console.log(`${key}的值被重新设置了`);
},
});
});
console.log(obj.name)
es6实现:
let objProxy = new Proxy(obj,{
get:function(target,key,receiver) {
console.log(`get方法被访问----`, key,receiver);
console.log(receiver === objProxy);
return Reflect.get(target,key,receiver)
},
set:function(target, key, newValue,receiver) {
console.log(`set方法被访问----`, key,receiver);
console.log(receiver === objProxy);
Reflect.set(target, key,newValue,receiver)
}
})
console.log(objProxy.name, objProxy.age);
objProxy.name = '修改后的值'