2012-09-04 11 views
14

W Ruby, można to zrobić:Dlaczego JavaScript nie umożliwia bezpośredniego wywoływania metod na liczbach?

3.times { print "Ho! " } # => Ho! Ho! Ho! 

Próbowałem to zrobić w JavaScript:

Number.prototype.times = function(fn) { 
    for (var i = 0; i < this; i++) { 
     fn(); 
    } 
} 

to działa:

(3).times(function() { console.log("hi"); }); 

To nie

3.times(function() { console.log("hi"); }); 

Podaruj Chrome s mi błąd składni: "Nieoczekiwany token ILLEGAL". Czemu?

+1

... Ponieważ JavaScript to nie Ruby? To jest jak pytanie "Dlaczego cobol nie działa jak Ruby?". – Incognito

+6

@Incognito um, nie? Pytam, dlaczego to błąd składni, a nie dlaczego nie działa jak rubin ... –

+1

Czy możesz wyjaśnić racjonalne zasady związane z mówieniem o ruby ​​w pierwszej kolejności i zachować spójność z tym stwierdzeniem? – Incognito

Odpowiedz

35

Po cyfrze oznacza liczbę dziesiętną liczby, trzeba będzie użyć innej, aby uzyskać dostęp do właściwości lub metody.

3..times(function() { console.log("hi"); }); 

Jest to konieczne tylko w przypadku literałów dziesiętnych. W przypadku literałów ósemkowych i szesnastkowych użyjesz tylko jednego: ..

03.times(function() { console.log("hi"); });//octal 
0x3.times(function() { console.log("hi"); });//hexadecimal 

również wykładniczy

3e0.times(function() { console.log("hi"); }); 

Można również użyć spacji, ponieważ przestrzeń w szeregu jest nieprawidłowy i wtedy nie ma dwuznaczności.

3 .times(function() { console.log("hi"); }); 

Chociaż jak stwierdził wxactly w komentarzach minifier usunęłaby przestrzeń powodując powyższy błąd składni.

+0

Ah, dzięki. Interesujące, że może również reprezentować kropkę dziesiętną w Ruby, ale nadal działa. –

+5

Podążam przeciwko robieniu 2 kropek, ponieważ bardzo prawdopodobne jest, że wprowadzi to w błąd czytelnika. Paranthezy są bardziej opisowe. –

+3

@AlexCoplan Zgaduję, ponieważ Ruby ma typy całkowite i zmiennoprzecinkowe, ale JavaScript ma właśnie numer – Musa

Powiązane problemy