ES6代理不能拦截数组索引

时间:2012-05-25 22:56:57

标签: node.js ecmascript-harmony proxy-object

这是我的测试代码(使用node --harmony-proxies foo.js运行:

var a = Proxy.create({
    get : function (proxy, prop)
    {
        return 5
    }
})


console.log(a['foo'])
console.log(a.length)
console.log(a['10'])
console.log(a[10])

为什么最后2行无法打印5,为什么代理无法拦截看起来像整数的属性?它是一个实现错误还是它是如何指定的?有没有一种单独的方法来拦截数组索引,所以我可以实现自己的数组(例如稀疏数组)?

2 个答案:

答案 0 :(得分:1)

如果我正确读取节点更改日志,那么节点0.6.18仍然在V8 3.6.6上运行,这是一个相当旧的版本(从2011年10月开始)。在该版本中,对代理的支持仍在进行中(正如其他支持的Harmony功能)。不要指望代理在V8 3.8之前(从2011年12月起)正常运行。不幸的是,当稳定版本的节点升级时,我无法告诉你。

答案 1 :(得分:1)

正如A. Rossberg所说,这个bug(以及其他几个showstoppers)在V8 3.8中得到修复(节点0.7.x非常稳定,0.8.x接近发布)。如果你正在使用代理,那么仍然有一些你需要注意的错误。这个github问题有一个很好的快速概述:https://github.com/tvcutsem/harmony-reflect/issues/4