JavaScript的Proxy


prtyaa
prtyaa 2023-12-26 17:20:46 62959
分类专栏: 资讯

Proxy构造方法

/**
 * 参数说明:
 * 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虽然在后面被重新赋值了,但是参数是被作为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

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30913
赞同 0
评论 0 条