2012-02-21 13 views
6

Dlaczego parseInt funkcji zamiast metody?Dlaczego nie analizuje się metody?

Funkcja:

var i = parseInt(X); 

Metoda:

var i = X.parseInt(); 
+3

Ponieważ spowodowałoby to błąd, gdyby X było niezdefiniowane? – jishi

+4

@jishi: Jeśli 'X' jest' niezdefiniowany', zawsze będziesz mieć błąd podczas próby uzyskania dostępu do właściwości. Nie jestem pewien, co by to miało wspólnego z 'parseInt' nie będącym metodą' Number'. –

+0

@amnotiam 'parseInt (undefined) === NaN', jeśli' parseint' był metodą 'String' lub' Number', to 'undefined.parseInt()' rzucił wyjątek, a nie powrót 'NaN' – JaredMcAteer

Odpowiedz

13

Edit:

nie jestem w 100% pewien, dlaczego parseInt nie jest metodą String, z wyjątkiem tego, że można uruchomić na wszystko. Wygląda na to, że może być częścią Math, ale nie jest to tak naprawdę operacja matematyczna.

End Edit

parseInt to metoda obiektu globalnego. W przeglądarce globalnym obiektem jest window. Można zadzwonić pod numer window.parseInt(), ale mechanizm JS umożliwia wykonywanie skrótów połączeń do metod globalnych.

Powiedział, że jest to kosztowne, ponieważ silnik musi zeskanować łańcuch zasięgu, szukając definicji parseInt. Generalnie, jeśli robię jeden zadzwonić do takiej metody w zakresie, będę odwoływać się globalny:

var foo = function (someString) { 
    var bar; 

    // ... 

    bar = window.parseInt(someString, 10); 

    // ... 
}; 

Jeśli mój kod musi uczynić więcej niż jedno połączenie do metody w zakresie, jednak go zlokalizuję i używam odniesienia:

var foo = function (someString, someOtherString) { 
    var parseInt = window.parseInt, 
     bar, 
     baz; 

    // ... 

    bar = parseInt(someString, 10); 
    baz = parseInt(someOtherString, 10); 

    // ... 
}; 
+3

Myślę, że prawdopodobnie pyta, dlaczego nie jest to metoda "Numeru". –

+2

Tak, może on jest - choć myślę, że jest bliższy "dlaczego nie jest" parseInt "metoda" String "?". – JAAulde

+1

@amnotiam - to też sobie wymyśliłem, ale parseInt() nie musi (i prawdopodobnie nie powinien (no, przynajmniej nie trzeba go uruchamiać na liczbach)) działa na liczbach, ale na wszystkim _but_ liczbach (Chyba dlatego nie jest to metoda "Numeru". – powerbuoy

Powiązane problemy