在nodejs中启用Harmony代理

是否有可能在nodejs中启用EcmaScript 6 Harmony Proxies? 如果是的话,有什么优点和缺点? 有没有关于如何使用它们的文档? 谢谢 !

调用节点与node --harmony-proxies应该做的伎俩。

优点:代理是一个非常强大的function,当你真的需要他们。

缺点:代理是一个非常强大的function,当你不需要它们(这应该是大部分时间)。 而且,实施还应该被视为实验。

至于文档,真正的atm是Harmony wiki,特别是这个页面,它反映了V8(以及节点)中代理的当前实现:

http://wiki.ecmascript.org/doku.php?id=harmony:proxies

我build议和谐reflection ,这使得它很容易设置获取/设置陷阱:

仔细更新 ,下面是CoffeeScript

 require 'harmony-reflect' handler = get: ( target, name ) -> console.log 'get' name return target[ name ] set: ( target, name, value ) -> console.log 'set' name target[ '%is-clean' ] = no if value isnt target[ name ] if value is undefined then delete target[ name ] else target[ name ] = value return value clean = ( x ) -> x[ '%is-clean' ] = yes return x p = Proxy {}, handler p[ 'a' ] = 1 p[ 'b' ] = undefined console.log p[ 'a' ], p[ 'b' ] console.log "c" of p, p[ 'c' ] console.log p clean p p[ 'a' ] = 1 console.log p p[ 'a' ] = 42 console.log p 

以上是在JavaScript中做“透明对象持久化”的知识代码。 使用harmony-reflect ,使所有对某个对象的getset操作被拦截变得微不足道 – 在这个演示中,我们设置了一个%is-clean属性,这样我们就可以testing对象成员是否已经被改变了,而且我们也删除已被设置为未定义的成员。

你可以使用pimped-proxy这个代理轻量级的实现,使得声明更容易和ES5兼容。 与本地代理不同,它只能在创build时对已知的属性进行代理。

https://github.com/Boulangerie/pimped-proxy

Proxy现在在节点版本> = 6中本地可用。

Harmony Proxies对于nodejs来说不会很好,因为它们实际上是同步types的函数调用。 也就是说,你不能实现一个asynchronous的代理方法。

看到这个GitHub存储库的例子: https : //github.com/mschwartz/SilkJS-Harmony