JavaScript – Proxy

参考

阮一峰 – Proxy

 

介绍和使用

Proxy 的作用是代理对象, 消费者不直接使用对象, 而是使用代理对象.

一般上做代理的目的就是想拦截对象访问做一些别的事情. 比如当对象改变以后, 同步 HTML. 

基本用法:

interface Person {
  name: string;
  age?: number;
}
const person: Person = {
  name: 'Derrick',
  age: 11,
};

const proxy = new Proxy(person, {
  get(target, prop: keyof typeof person, receiver) {
    console.log(target === person); // true
    console.log('prop', prop); // age
    console.log('receiver', receiver === proxy); // true
    return target[prop];
  },
  set(target, prop: keyof typeof person, value: typeof person[keyof typeof person], _receiver) {
    (target as any)[prop] = value;
    return true; // 在 'use strict' mode 中, 如果这里返回 false 则会报错
  },
  deleteProperty(target, p: keyof typeof person) {
    delete target[p];
    return true;
  },
});

proxy.age = 15;
console.log(proxy.age);
delete proxy.age;

上面拦截了对象的 get set delete 访问. 当对象被 get set delete 时, Proxy 方法就会被触发.

可以获得真的对象, 被访问的属性, set 的值, 还有 Proxy 对象.

然后就可以做许多事情了.

注意 set, delete 必须返回 boolean. 如果返回 false 在 strict mode 下会报错.

 

TODO

上面有一些 TypeScript 的问题

 

posted @ 2022-05-14 17:55  兴杰  阅读(80)  评论(0编辑  收藏  举报