9
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! 

Bu davranışı açıklayan ve/veya bir geçici çözüm önerebilecek biri var mı?IE9'da "Number.prototype" öğesinin özelliklerine bir sayı değişkeni üzerinden erişirken garip "getter" davranışı

jsfiddle.net/yr7hQ/

+1

Sadece meraktan dolayı, neden dünya üzerinde * bunu yapmak istersiniz? –

+3

Yeni Sayı (10) ile çalışır - sadece ilkel olarak tamsayılarla başarısız olur. Güzel bulundu! – pimvdb

+0

Gerçekten bir IE9 hatası gibi görünüyor, ama altta yatan nedenden dolayı merak ediyorum .. Sonra ne yapıyor olmanın daha iyi bir yolu olmalı .. –

cevap

2

O sonucunu açıklayamam, ama aynı zamanda geçici bir çözüm istedi.

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

Senaryo: Bu veriyor

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

: API kirleten önlemek için

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()) 
+0

Mükemmel! Şimdi bunu denemek istemediğim için kendimi tekmeliyorum. – davidchambers

+1

Oops. Düzlemden çıktıktan hemen sonra kodu okumamalıyım. İlk bakışta 'foo' nun bir özellik değil, burada bir yöntem olduğunu fark etmedim. Bu kesinlikle bir seçenek, ancak API'yi değiştirmeyi gerektirmeyen bir geçici çözüm bulmayı umuyorum. – davidchambers

+0

@davidchambers: "yöntemler", işlev türü olan –

1

bir IE9 uyulması gereken bir bağlamlarda bir yardımcı işlevi tanımlayabiliriz:

_(10).foo 

Daha iyi bir çözümü öğrenmek isterim.