IE9 中从数字文字访问"Number.prototype"属性时出现奇怪的"getter"行为


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/

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

演示: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())

为了避免破坏API,可以在必须兼容IE9的上下文中定义一个helper函数:

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

这允许:

_(10).foo

最新更新