这篇写proxy、reflect的文章写的好:https://www.zhihu.com/search?type=content&q=proxy%20reflect
https://segmentfault.com/a/1190000015009255
https://segmentfault.com/a/1190000015009255
简单定义:可以用来定义对象各种基本操作的自定义行为 ,可以理解为对对象或者函数的代理操作。
注意:
要对proxy实例进行操作,而不是对目标对象target进行操作,handler参数也是一个对象,用来定制拦截行为。proxy应用:https://segmentfault.com/a/1190000015009255
proxy代理:https://es6.ruanyifeng.com/#docs/proxy 语法
:var proxy = new Proxy(target,handler); 例子
:let person = new Proxy({},validator);person.age = 10;set和get中的obj、prop、value分别对应{}、age、10
let obj = { id: 0, name: 'Wmaker' };
let objProxy = new Proxy(obj, {
get(target, attr) {
console.log(`Get ${attr}`);
return target[attr];
},
set(target, attr, val) {
console.log(`Set ${attr}`);
target[attr] = val;
return true;
}
});
objProxy.id = 2; //
objProxy.name; // 打印出:Get name,没有出发set,相当:obj.name;
objProxy.name = "ss"; // 打印出:Set name,没有出发get,相当:obj.name;
console.log(obj.id) //2
console.log(objProxy) //Proxy{id:2,name:'ss'}
console.log(objProxy.id) //2
网友评论