【问题标题】:ES6 proxies cannot intercept array indicesES6 代理无法拦截数组索引
【发布时间】:2012-06-01 11:55:09
【问题描述】:

这是我的测试代码(使用 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,为什么代理无法拦截看起来像整数的属性?它是一个实现错误还是它是如何指定的?是否有单独的方法来拦截数组索引,以便我可以实现自己的数组(例如稀疏数组)?

【问题讨论】:

  • 那将是一个错误。那是哪个版本的node,基于哪个版本的V8?
  • 它发生在 0.6.15 和 0.6.18,我不知道 v8。
  • 您的示例在我安装了 NVM 的 NodeJS v0.8.14 上运行良好。
  • 是的,这是代理在 0.6.x 中未正确实现的问题。我投票决定关闭它,因为它可能对未来的访问者没有帮助。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 2012-07-04
      • 2017-03-19
      • 2015-05-16
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多