Firefox 中 getter 返回函数时的意外行为

Unexpected behaviour in Firefox when getter returns a function

提问人:davidchambers 提问时间:10/21/2011 最后编辑:Rob Wdavidchambers 更新时间:12/29/2011 访问量:95

问:

Object.defineProperty(Number.prototype, 'foo', {
  get: function () {
    var me = this
    return function () { return me.valueOf() }
  }
})

console.log(5..foo())

这在 Chrome 中记录 5,但在 Firefox 中记录 0。

Object.defineProperty(Number.prototype, 'bar', {
  get: function () {
    return this.valueOf()
  }
})

console.log(5..bar)

这如预期的那样在两个浏览器中记录 5。

谁能解释这种行为,也许可以建议如何重写第一个示例以在Firefox中工作,就像在Chrome中一样?

jsfiddle.net/V2sHg/2/

javascript 这个 getter 原型编程

评论

0赞 alex 10/21/2011
我无法弄清楚,但也许Firefox不想在获取属性时返回函数。
1赞 daiscog 10/21/2011
确实非常奇怪的行为 - Firefox 在尝试获取函数时似乎将 Number 原型绑定到,但删除 after 会将其绑定到 的实例。也许这是一个错误?this()5..fooNumber

答:

0赞 acanimal 12/29/2011 #1

当使用“new Number(value)”但不直接使用“number”时,它在 FF 上对我有用:

尝试:

var n = new Number(8);
n.foo(); --> 8