Pytanie Dlaczego JavaScript nie umożliwia bezpośredniego wywoływania metod na liczbach? [duplikować]


To pytanie już zawiera odpowiedź:

W Ruby możesz to zrobić:

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

Próbowałem zrobić to 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 działa

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

W przeglądarce Chrome występuje błąd składni: "Nieoczekiwany token ILLEGAL". Czemu?


14
2017-09-04 23:18


pochodzenie


... Ponieważ JavaScript to nie Ruby? To jest jak pytanie "Dlaczego cobol nie działa jak Ruby?". - Incognito
@Incognito um, nie? Pytam, dlaczego jest to błąd składniowy, a nie dlaczego nie działa jak ruby ​​... - Alex Coplan
Czy potrafisz wyjaśnić racjonalne zasady związane z mówieniem o rubinach i zachować spójność z tym stwierdzeniem? - Incognito
@Incognito Chciałem ponownie stworzyć tę metodę, dlatego właśnie wspomniałem o tym, co próbowałem osiągnąć. - Alex Coplan
@Incognito oczywiście Ruby jest czymś złym w wychowaniu w pytaniu o JS, więc nie zawracam sobie tym głowy ... - Alex Coplan


Odpowiedzi:


The . po tym, jak cyfry oznaczają przecinek dziesiętny liczby, będziesz musiał 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. Dla literałów ósemkowych i szesnastkowych używałbyś 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żesz także użyć spacji, ponieważ spacja w liczbie jest nieprawidłowa, a następnie nie ma niejasności.

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

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


35
2017-09-04 23:20



Ah, dzięki. Interesujące, że może również reprezentować kropkę dziesiętną w Ruby, ale nadal działa. - Alex Coplan
Idę przeciwko robieniu 2 kropek, ponieważ bardzo prawdopodobne jest, że wprowadzi to w błąd czytelnika. Paranthezy są bardziej opisowe. - Umur Kontacı
@AlexCoplan Zgaduję, ponieważ Ruby ma typy całkowite i zmiennoprzecinkowe, ale JavaScript ma właśnie numer - Musa
Ostatni przykład wykorzystania przestrzeni jest interesujący, ale niebezpieczny, na którym można polegać ... Po uruchomieniu kodu przez minifier BAM pojawia się błąd składni. - wxactly