在nodejs中启用Harmony Proxies

时间:2012-05-19 14:11:58

标签: node.js ecmascript-harmony

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

5 个答案:

答案 0 :(得分:20)

使用node --harmony-proxies调用节点应该可以解决问题。

优点:当你真正需要时,代理是一个非常强大的功能。

缺点:代理是一个非常强大的功能,当你不需要它们时(大多数时候应该这样)。此外,实施仍应视为实验性的。

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

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

答案 1 :(得分:2)

我推荐harmony-reflect,这样可以轻松实现设置获取/设置陷阱:

更新小心,下面是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属性,以便我们可以测试对象成员是否已被更改,我们还删除已设置为undefined的成员。

答案 2 :(得分:1)

你可以使用pimped-proxy代理的轻量级实现,使声明更容易和ES5兼容。 与本机代理不同,它只能代理创建时已知的属性。

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

答案 3 :(得分:1)

$custom_terms = get_terms('product-type'); $loop = new WP_Query($args); if($loop->have_posts()) { echo '<span class="posted_in">'.$custom_term->name.'</span>'; } wp_reset_postdata(); 现在可以在节点版本&gt; = 6中原生使用。

答案 4 :(得分:-11)

Harmony Proxies对于nodejs来说效果不佳,因为它们是有效的同步类型函数调用。也就是说,您无法实现异步的代理方法。

请参阅此GitHub存储库以获取示例: https://github.com/mschwartz/SilkJS-Harmony