2014-10-21 7 views

Odpowiedz

6

Najwyraźniej IE traktuje DOM obiektów i obiektów JavaScript oddzielnie, i można • Rozszerz obiekty DOM za pomocą Object.prototype.

IE nie pozwala użyć prototyp, który nie jest rodzimy ..

Musisz zrobić oddzielną funkcję (globalne, jeśli chcesz) jako

function isInteger(num) { 
    return (num^0) === num; 
} 

console.log(isInteger(1)); 
1

Niezależnie od ewentualnych problemów z dodając do natywnych prototypów w MSIE, twoje ciało funkcyjne jest nieodpowiednie dla metody dodanej do Number.prototype.

Metody na prototypie wzywa się przypadkach typu, a przykładem jest przekazywany jako this (i zawsze będzie przedmiotem nie pierwotną).

Dlatego bardziej poprawne wdrożenie byłoby:

Number.prototype.isInteger = function() { 
    return (this^0) === +this; 
} 

z wykorzystaniem:

(1).isInteger(); 

Jeśli chcesz użyć Number.isInteger(n) zamiast tego, byś musiał dodać swoją funkcję bezpośrednio do obiektu Number nie jego prototyp. Istnieje rygorystyczne shim dla tego na the MDN page for this function.

+0

Dziękuję za odpowiedź. – huangxbd1990

+0

Dziękuję za odpowiedź i link do Number.isInteger w MDN.But '("1"). IsInteger();' rzuci błąd: Uncaught TypeError: undefined nie jest funkcją – huangxbd1990