奇怪的“吸气剂”从数字文字访问“Number.prototype”属性时 IE9 中的行为

发布于 2024-12-11 09:45:18 字数 429 浏览 3 评论 0原文

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

console.log(10.5.foo)
console.log(10..foo)   // 0 in IE9!
console.log(10.0.foo)  // 0 in IE9!
console.log(10.01.foo)
console.log((10).foo)  // 0 in IE9!
var x = 10
console.log(x.foo)     // 0 in IE9!

任何人都可以解释这种行为和/或建议解决方法吗?

jsfiddle.net/yr7hQ/

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

console.log(10.5.foo)
console.log(10..foo)   // 0 in IE9!
console.log(10.0.foo)  // 0 in IE9!
console.log(10.01.foo)
console.log((10).foo)  // 0 in IE9!
var x = 10
console.log(x.foo)     // 0 in IE9!

Can anyone explain this behaviour and/or suggest a workaround?

jsfiddle.net/yr7hQ/

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

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

发布评论

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

评论(2

旧人九事 2024-12-18 09:45:18

我无法解释这个结果,但您还要求解决方法。

演示: http://jsfiddle.net/ThinkingStiff/FJ7Qx/

脚本:

Number.prototype.foo = function() { return Number( this ) };

console.log(10.5.foo())
console.log(10..foo())
console.log(10.0.foo())
console.log(10.01.foo())
console.log((10).foo())
var x = 10
console.log(x.foo())

I can't explain that result, but you also asked for a workaround.

Demo: http://jsfiddle.net/ThinkingStiff/FJ7Qx/

Script:

Number.prototype.foo = function() { return Number( this ) };

console.log(10.5.foo())
console.log(10..foo())
console.log(10.0.foo())
console.log(10.01.foo())
console.log((10).foo())
var x = 10
console.log(x.foo())
猫瑾少女 2024-12-18 09:45:18

为了避免玷污 API,可以在必须适应 IE9 的上下文中定义一个辅助函数:

function _(n) { return new Number(n) }

这允许:

_(10).foo

我很想了解更好的解决方法。

To avoid sullying the API, one could define a helper function in contexts where IE9 must be accommodated:

function _(n) { return new Number(n) }

This allows:

_(10).foo

I'd love to learn of a better workaround.

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