有没有人使用过ECMAScript Proxies?

Tow*_*wer 10 javascript proxy ecmascript-6

我想试试ESx(Harmony?)Proxies.我想我现在知道基础知识,但我认为我没有能力利用它们.

有没有人设法使用它们的任何好处?我不知道任何图书馆或其他任何图书馆.

Joh*_*ers 6

有关代理的更多信息,请查看助理教授Tom Van Cutsem 撰写的这篇文章.与谷歌的Mark Miller一起,Tom在代理人的提议中发挥了关键作用,在他的es-lab项目工作期间将其纳入未来的ECMAScript标准.

此外,请注意DirectProxies.js已被新的reflect.js垫片取代.

最后,查看Sindre Sorhus的负数组项目,了解一个简单用例的例子.


更新:

今天,问这个问题差不多5年了.虽然他们已经在2015年成为ECMAScript 2015标准(又称ES6)的一部分,但许多浏览器仍然没有实现它们:

在此输入图像描述

如果您想在阅读此答案时知道哪些浏览器支持代理,请查看CanIUse.


And*_*erg 5

代理是一个相当具有战略意义的功能,主要用于实现绑定或高级库抽象.如果您没有看到自己代码的直接用例,请不要担心.事实上,如果你这样做了,你应该至少考虑两次才能使用它们 - 通常情况下它们是矫枉过正的,并且有一种更简单,更有效的方法来实现同样的目的.

原始提案页面上有几个示例:http://wiki.ecmascript.org/doku.php?id = eth : proxies


web*_*rst 4

事情已经发生了一些变化!Firefox 本身支持代理。使用Harmony-reflect.js的实现,您可以尝试根据Direct Proxies的建议规范使用代理。这适用于当前的 Firefox 或最新的 Chrome

可能的用例:您有一个对象,该对象表示图形中的节点,其中包含idtype和任意其他用户定义的属性。将该节点绘制到屏幕上的库想要保存屏幕坐标,并且也直接与该节点类似。这可能会覆盖现有属性。

您现在可以将代理移交给绘图库,以捕获对节点的绘图特定属性的访问。然后,将它们重定向到节点的内部命名空间属性(例如drawing)以分隔此数据。

这样,一个节点的所有数据都可以保存在一个地方。无需为不同的库复制和转换它,也无需稍后在不同的地方更改相同的属性。

  • DirectProxies.js 已被新的 Reflect.js shim 取代。请参阅 https://github.com/tvcutsem/harmony-reflect (3认同)