Странное поведение "getter" в IE9 при доступе к свойству `Number.prototype` из числового литерала - PullRequest
9 голосов
/ 22 октября 2011
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 /

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Я не могу объяснить этот результат, но вы также попросили обойти это решение.

Демо: 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())
1 голос
/ 29 октября 2011

Чтобы избежать использования API, можно определить вспомогательную функцию в контексте, где должен быть установлен IE9:

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

Это позволяет:

_(10).foo

Я бы с удовольствием узнал о лучшем обходном пути.

...