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:
function _(n) { return new Number(n) }
Это позволяет:
_(10).foo
Я бы с удовольствием узнал о лучшем обходном пути.