Proxy和Reflect

  1. Proxy
    1. 拦截的操作
    2. 收回代理
    3. this 问题
    4. 用处
  2. Reflect

Proxy

用于改变某些操作的默认行为,在语言层面做出的修改,属于”元编程”。对变成语言进行编程。

var proxy = new Proxy(
  {},
  {
    get: function(target, property) {},
    set: function(target, key, value) {}
  }
);

Proxy 作为构造函数,接受两个参数,第一个是要代理的目标对象,第二个是一个配置对象。注意如果要使得 Proxy 起作用,必须针对 Proxy 对象进行操作。如果配置对象没有设置任何拦截,那就等同于直接通向原对象。

拦截的操作

  • get:拦截对象属性的获取
  • set:拦截对象属性的设置
  • has:拦截 propKey in proxy 的操作,返回一个布尔值
  • deleteProperty:拦截 delete 操作
  • ownKeys:拦截返回所有的可遍历的属性数组的操作
  • getOwnPropertyDescriptor:返回属性的描述对象
  • defineProperty:就是拦截 defineProperty
  • apply

也就是基本都是可以拦截的了

收回代理

Proxy.revocable 其实就是返回一个可以被取消的 Proxy 实例。

let { proxy, revoke } = Proxy.revocable({}, {});
revoke();

就是在目标不允许直接访问的时候,可以通过代理访问,一旦访问结束,就可以收回代理权,不允许再次访问。

this 问题

Proxy 不是目标对象的透明代理,因为在设置了 Proxy 代理的情况下,目标对象的 this 关键字会被指向 Proxy 代理。这个的问题很大啊。

用处

就是拦截目标对象的任意属性,可以来做很多的事情,访问某个属性的时候可以拦截下来,做其他的事情。

Reflect


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:Proxy和Reflect

文章字数:401

本文作者:泽鹿

发布时间:2019-08-28, 16:45:23

最后更新:2019-08-28, 20:06:17

原始链接:http://panyifei.github.io/2019/08/28/前端技术/js/框架以及规范/ECMAScript6/Proxy和Reflect/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏