站长资讯网
最全最丰富的资讯网站

一起聊聊Javascript之Proxy与Reflect

本篇文章给大家带来了关于JavaScript中Proxy与Reflect的相关知识,希望对大家有帮助。

一起聊聊Javascript之Proxy与Reflect

ECMAScript 在 ES6 规范中加入了 Proxy 与 Reflect 两个新特性,这两个新特性增强了 JavaScript 中对象访问的可控性,使得 JS 模块、类的封装能够更加严密与简单,也让操作对象时的报错变得更加可控。

Proxy

Proxy,正如其名,代理。这个接口可以给指定的对象创建一个代理对象,对代理对象的任何操作,如:访问属性、对属性赋值、函数调用,都会被拦截,然后交由我们定义的函数来处理相应的操作,
JavaScript 的特性让对象有很大的操作空间,同时 JavaScript 也提供了很多方法让我们去改造对象,可以随意添加属性、随意删除属性、随意更改对象的原型……但是此前 Object 类提供的 API 有许多缺点:

  • 如果要用 Object.defineProperty 定义某个名称集合内的全部属性,只能通过枚举的方式为全部属性设置 getter 和 setter,而且由于只能每个属性创造一个函数,集合太大会造成性能问题。
  • Object.defineProperty 定义后的属性,如果仍想拥有正常的存取功能,只能将数据存放在对象的另一个属性名上或者需要另一个对象来存放数据,对于只想监听属性的场合尤为不便。
  • Object.defineProperty 无法修改类中不可重新定义的属性,例如数组的 length 属性。
  • 对于那些尚不存在且名称不好预测的属性,Object.defineProperty 爱莫能助。
  • 无法修改或阻止某些行为,如:枚举属性名、修改对象原型。

Proxy 接口的出现很好地解决了这些问题:

  • Proxy 接口将对对象的所有操作归类到数个类别中,通过 Proxy 提供的陷阱拦截特定的操作,再在我们定义的处理函数中进行逻辑判断就可以实现复杂的功能,并且还能控制比以前
赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号