对js对象的属性或方法进行动态代理
var target = {a: 1, b: function () {
console.log(1234);
}};
var proxy = new Proxy(target, {
set: function(target, key, value, receiver){
console.log('set', key, value);
return Reflect.set(target, key, value, receiver);
},
get: function(target, key, receiver){
return target[key] instanceof Function ? function (...args) {
console.log('before');
target[key](args);
console.log('after');
} : target[key];
}
});
proxy.b();
proxy.a = 123
调用结果
- "before"是代理方法前执行
- "1234"是原对象方法执行
- "after"是代理方法后执行
- "set a 123"是对a属性进行赋值前执行
![执行结果](https://i-blog.csdnimg.cn/blog_migrate/13878d335bd8e89b9339e1cbea0d4f11.png)