2012-09-04 16 views
14

In Ruby, si può fare questo:Perché JavaScript non consente di chiamare direttamente i metodi sui numeri?

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

Ho provato a farlo in JavaScript:

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

Questo funziona:

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

questo non

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

Chrome dà s me un errore di sintassi: "Token inaspettato ILLEGAL". Perché?

+1

... Perché JavaScript non è Ruby? È come chiedere "Perché il cobol non funziona come Ruby?". – Incognito

+6

@Incognito um, no? Sto chiedendo perché è un errore di sintassi, non perché non funziona come rubino ... –

+1

Puoi spiegare la ragione dietro a parlare di ruby ​​in primo luogo e mantenere la coerenza con questa affermazione? – Incognito

risposta

35

Il . dopo le cifre rappresenta il punto decimale del numero, sarà necessario utilizzarne un altro per accedere a una proprietà o un metodo.

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

Questo è necessario solo per valori decimali. Per i letterali ottali ed esadecimali si usa solo uno ..

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

anche esponenziale

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

È inoltre possibile utilizzare uno spazio dal momento che uno spazio in un numero non è valido e quindi non v'è alcuna ambiguità.

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

Anche se, come affermato da wxactly nei commenti un minifier sarebbe rimuovere lo spazio che causa l'errore di sintassi sopra.

+0

Ah, grazie. Interessante che possa anche rappresentare un punto decimale in Ruby ma funziona comunque. –

+5

Sono contrario a fare 2 punti poiché è molto probabile che crei confusione per il lettore. Le parate sono più auto-descrittive. –

+3

@AlexCoplan Sto indovinando perché Ruby ha tipi interi e float, ma JavaScript ha solo il numero – Musa

Problemi correlati