Proxy与Reflect
监听对象操作
在Object中,可以通过defineProperty中的get,set进行监听,
Proxy基本使用
有两个参数,第一个是要代理的对象,第二个是捕获器,在不知道捕获器使用哪个之前可以先传个空对象。就会启用默认的捕获器。
代理对象是可以获取到原对象的值,对值更改,原对象的值,也会更改,这就是启用了默认捕获器
Proxy的set和get捕获器
设置获取的捕获器,有三个参数,第一个是代理的对象,第二个是需要获取的key,设置值的捕获器也是有 四个参数,第一个是代理的对象,第二个是需要获取的key,带三个为设置的新value
判断某key是否存在该对象中,也可以使用代理对象,然后增加一个监听in的捕获器,即可监听了
对删除操作监听
Proxy所有捕获器
获取对象原型捕获器,设置对象原型捕获器,判断某个对象能否进行扩展捕获器
Proxy的constructor和apply
对函数的apply捕获器,三个参数,第一个是函数,第二个是this和第三个要处理数据
Reflect的作用
Reflect的常见方法
Reflect的使用
使用reflect的区别就是,Reflect返回的是一个布尔类型,可以判断操作是否成功
通过代理对象,来查看name值,来到对象中的set和get方法中,this的指向还是obj而不是objProxy,这就违背了代理对象的初心,所以我们需要更改方式。
因为当访问.name时,只来到代理对象的get捕获器一次。如果,this指向的是objProxy,那么访问到对象的get,里面的this._name,就相当于objProxy._name,按理来说就会再来一次get的捕获器中。
Receiver的作用
receiver其实就是代理对象,receiver会当做代理对象传入对象中的this。此时就解决了,get中this指向问题了