在ES6标准中引入的新功能ØNE是代理对象。 Proxy对象用于定义基本操作的自定义行为(例如,属性查找,赋值,枚举,函数调用等)。
您可能很快会在这里遇到一些陌生的术语/概念,我建议您继续尝试一下,因为代理概念实际上非常简单且有用。
在继续之前,我们需要定义3个关键术语:
- handler —包含陷阱的占位符对象
- 陷阱 —提供属性访问的方法
- 目标 —代理虚拟化的对象
在此处查看所有可用陷阱的列表。
因此,让我们看一些示例和实际应用。
句法
以下是代理语法的示例,其中我们传入一个目标 (在这种情况下为空对象)和一个处理程序 。
通用对象属性查找行为
在上面的代码段中,我们有一个带有2个键的简单对象( reason和code )。 请注意,控制台日志在第7行和第8行返回键值。 然后注意第9行的正常行为。我们尝试检索一个不存在的密钥( beer ),因此我们收到未定义的密钥。
代理对象属性查找行为
此代码段中还有更多内容。 我们定义使用GET陷阱的处理程序(第3行)。 处理程序将目标和请求的密钥名称传递到陷阱中。 第11行包含与我们的“公共对象查找”示例相同的对象。 我们的代理在第16行实例化。
注意第18和19行上的控制台日志将返回预期的键值。 但是,请从第20行的日志中查看规则- “键不存在”。
我们已经使用自定义代理覆盖了该操作的默认行为。
使用代理进行价值验证
在此代码段中,我们在第4行上定义了处理程序 。然后,检查以确保年龄属性是所设置的属性,如果是,则对类型和可接受的值范围进行验证。 如果验证失败,则会传递自定义错误消息。 否则,在第16行,我们设置新的prop值,并返回true表示设置成功的prop值。 没什么
- 验证
- 值校正
- 属性查询扩展
- 跟踪属性访问
- 可撤销的参考
- 在javascript中实现DOM
这就是ES6中的代理服务器。 在Twitter上让我们知道您的想法和问题。 坚持下去。
如果您喜欢这篇文章,请推荐并分享以帮助其他人找到它!
From: https://hackernoon.com/introducing-javascript-es6-proxies-1327419ab413