可以在nodejs中启用EcmaScript 6和谐代理吗?如果是这样的话,利弊是什么?有关于如何使用它们的文档吗?谢谢!
发布于 2012-05-20 00:19:29
使用node --harmony-proxies
调用节点应该可以做到这一点。
优点:当你真的需要代理的时候,它是一个非常强大的特性。
缺点:代理是一个非常强大的功能,当你不需要它们的时候(大多数时候应该是这样的)。此外,实现仍然应该被认为是实验性的。
至于文档,所有的自动柜员机都是Harmony wiki,特别是这个页面,它反映了V8 (以及节点)中代理的当前实现:
http://wiki.ecmascript.org/doku.php?id=harmony:proxies
发布于 2013-09-20 00:15:00
我推荐harmony-reflect,它使得设置get/set陷阱变得很容易:
UPDATE小心,下面是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
属性,这样我们就可以测试对象成员是否被更改了,我们还删除了被设置为未定义的成员。
发布于 2016-12-10 17:08:58
您可以使用pimped-proxy,它是代理的轻量级实现,使声明更容易,并且与ES5兼容。与本机代理不同,它只能代理创建时已知的属性。
https://stackoverflow.com/questions/10665892
复制相似问题