/**
* 参数说明:
* target --- 用Proxy包装的目标对象(目标对象可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
* handler --- 一个对象,其属性是当执行一个操作时定义代理的行为的函数。
*/
let p = new Proxy(target, handler);
访问属性
操作/**
* 结论:
* handler.get方法有三个参数,target、key、receiever
* target是用Proxy包装的目标对象
* key是执行get操作的时候target的属性名
* receiever是当前的Proxy对象
*/
var o = {x: "xxx"};
var p = new Proxy(o, {
get(target, key, receiver) {
console.log(`target: ${target === o}, key: ${key === "x"}, receiver: ${receiver === p}`)
}
});
p.x; // target: true, key: true, receiver: true
/**
* 结论:
* target不会随着之前的目标对象被重新赋值而发生变化,target虽然在后面被重新赋值了,但是参数是被作为target参数传入Proxy的时候的那个引用
*/
var o = {x: "xxx"};
var temp = o;
o = new Proxy(o, {
get(target, key, receiver) {
console.log(`target: ${target === o}, temp: ${temp === target}, key: ${key === "x"}, receiver: ${receiver === o}`)
}
});
o.x; // target: false, temp: true, key: true, receiver: true
var o = {x: "xxx"};
var p = new Proxy(o, {
get(target, key, receiver) {
console.log(`${new Date} : ${target.x}`);
}
});
p.x; // Mon Mar 16 2020 11:57:05 GMT+0800 (中国标准时间) : xxx
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。