ES6深入浅出-13 Proxy 与 Reflect-2.Proxy 代理

Posted wangjunwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6深入浅出-13 Proxy 与 Reflect-2.Proxy 代理相关的知识,希望对你有一定的参考价值。


阮一峰http://es6.ruanyifeng.com/#docs/proxy
MDN https://developer.mozilla.org/zh-CN/docs/Web/javascript/Reference/Global_Objects/Proxy
无限代理Tree http://www.infoq.com/cn/articles/es6-in-depth-proxies-and-reflect

技术图片

技术图片

技术图片
通过操作然后反射回去。
技术图片

把proxy.name等于frank的这个操作反射到这个target上面去。
技术图片
输出这个被代理的对象。
技术图片


技术图片

原理图
技术图片

技术图片

控制被代理对象的读和写

例如要做一个游戏,默认只有三条命,
技术图片

用代理对它进行读和写的操作
技术图片
设置命为-1条。就会默认为0
技术图片

直接传递一个对象当参数,而不是一个对象的变量。这样就没有办法操作gams.lives这么去直接改了。只能通过proxy去改。
技术图片

就算是不存在的属性,也不会报错。这是之前我们做不到的事情。这就是元编程,可以生成代码的代码。
技术图片
属性的属性,这个就没有了。技术图片

无限代理

如果不返回35,而是返回一个可以被代理的对象。可以参考下面的无限代理
无限代理Tree http://www.infoq.com/cn/articles/es6-in-depth-proxies-and-reflect

技术图片
上面先声明了一个Tree
技术图片
如果它是一个普通的对象,根本就不可能搞这件事情。读到branch1就是undefined了。
技术图片

Tree函数会返回一个新的代理对象,对象里面代理的是一个空对象。
技术图片
如果读的key不在target里面。比如说tree.branch1,那么就返回的是false,它就会把branch1写到target上面来,值是一个新的Tree也就是代理对象。
技术图片

技术图片

技术图片

技术图片
因为没有employees这个方法,所以最终实际propKey就是employees
技术图片

这样代码看起来很优雅。
技术图片

Vue3说是要用proxy来改写。


 

结束

 

以上是关于ES6深入浅出-13 Proxy 与 Reflect-2.Proxy 代理的主要内容,如果未能解决你的问题,请参考以下文章

es6代理 proxy 学习

ES6系列_13之Proxy进行预处理(简单学习)

ES6的Reflect对象

ES6——Proxy与Reflect

es6 Reflect 与 Proxy

@芥末的糖 ---------- ES6---Proxy与Reflect 实现重载(overload)