是否可以在nodejs中启用EcmaScript 6 Harmony Proxies?如果是这样,有什么优点和缺点?有没有关于如何使用它们的文档? 谢谢!
答案 0 :(得分:20)
使用node --harmony-proxies
调用节点应该可以解决问题。
优点:当你真正需要时,代理是一个非常强大的功能。
缺点:代理是一个非常强大的功能,当你不需要它们时(大多数时候应该这样)。此外,实施仍应视为实验性的。
至于文档,所有真正有atm的是Harmony wiki,特别是这个页面,它反映了V8(以及节点)中代理的当前实现:
答案 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
,使对象上的所有get
和set
操作都被拦截变得微不足道 - 在此演示中,我们设置了%is-clean
属性,以便我们可以测试对象成员是否已被更改,我们还删除已设置为undefined的成员。
答案 2 :(得分:1)
你可以使用pimped-proxy代理的轻量级实现,使声明更容易和ES5兼容。 与本机代理不同,它只能代理创建时已知的属性。
答案 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