-
Notifications
You must be signed in to change notification settings - Fork 1
Proxy
兰亭古墨 edited this page Jun 23, 2021
·
1 revision
const target = {
name: 'hefeng6500'
};
const handler = {
get(target, property, receiver) {
return Reflect.get(target, property); // or return target[property];
},
set(target, property, value, receiver) {
if (target[property] !== value) {
Reflect.set(target, property, value); // or target[property] = value
}
}
}
const proxy = new Proxy(target, handler)
console.log(proxy);
console.log(proxy.name);
proxy.name = "yanglong"
console.log(proxy.name);
// 访问和设置代理对象不会影响原始对象
console.log(target);
1、getter
函数用于拦截对 proxy 实例的访问,它接受target(目标对象), property(属性), receiver(最初被调用的对象,通常是 proxy)。如下形式的访问都可以被拦截到:
- 访问属性:
proxy[foo]
和proxy.bar
- 访问原型链上的属性:
Object.create(proxy)[foo]
Reflect.get()
2、setter
函数用于在设置 proxy 实例属性时进行拦截,它接受target(目标对象), property(属性), value(新值), receiver(最初被调用的对象,通常是 proxy)。如下形式的proxy值设置都可以被拦截到:
- 指定属性值:
proxy[foo] = bar
和proxy.foo = bar
- 指定继承者的属性值:
Object.create(proxy)[foo] = bar
Reflect.set()