2

这是我的测试代码(使用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])

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

4

2 回答 2

1

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

于 2012-05-26T20:10:30.750 回答
1

正如 A. Rossberg 所指出的那样,该错误(以及其他一些阻碍因素)在 V8 3.8 中已修复(节点 0.7.x 非常稳定,0.8.x 即将发布)。但是,如果您使用代理,仍然需要注意一些错误。这个 github 问题对它们有一个很好的快速概述:https ://github.com/tvcutsem/harmony-reflect/issues/4

于 2012-05-27T16:32:55.000 回答