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

发布于 2024-12-11 09:44:02 字数 561 浏览 0 评论 0原文

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/

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

console.log(5..foo())

This logs 5 in Chrome, but 0 in Firefox.

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

console.log(5..bar)

This logs 5 in both browsers as expected.

Can anyone explain this behaviour, and perhaps suggest how the first example could be rewritten to work in Firefox as it does in Chrome?

jsfiddle.net/V2sHg/2/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

电影里的梦 2024-12-18 09:44:02

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

尝试:

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

It works for me on FF when using "new Number(value)" but not using directly a "number":

Try:

var n = new Number(8);
n.foo(); --> 8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文