Proxy基本使用

ES6当中新增了一个Proxy类,他可以帮助我们创建一个代理对象
白话说就是当我们想要监听一个对象操作的时候,可以先创建一个代理对象(Proxy对象);之后对这个对象进行操作的时候都是通过这个代理对象来进行,代理对象可以监听我们想要对原对象进行哪些操作。

const p = new Proxy(target, handler)
image.png

Proxy的set和get捕获器

  1. 如果我们想要侦听某些具体的操作,那么就可以在handler中添加对应的捕捉器(Trap):

set:设置对象的参数(4个参数)
target:目标对象(侦听的对象);
property:将被设置的属性key;
value:新属性值;
receiver:调用的代理对象

get:获取对象的参数(3个参数)
target:目标对象(侦听的对象);
property:被获取的属性key;
receiver:调用的代理对象;
image.png

Reflect的作用

  • 它主要提供了很多操作JavaScript对象的方法,有点像Object中操作对象的方法;
  • 比如Reflect.getPrototypeOf(target)类似于 Object.getPrototypeOf()
  • 比如Reflect.defineProperty(target, propertyKey, attributes)类似于Object.defineProperty() ;

为什么需要Reflect

是因为在早期的ECMA规范中没有考虑到这种对 对象本身 的操作如何设计会更加规范,所以将这些API放到了Object上面;
但是Object作为一个构造函数,这些操作实际上放到它身上并不合适
所以在ES6中新增了Reflect,让我们这些操作都集中到了Reflect对象上

Reflect的使用

image.png

Q.E.D.