2012-09-04 12 views
14

En Ruby, usted puede hacer esto:¿Por qué JavaScript no le permite llamar directamente a los métodos de números?

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

Traté de hacerlo en JavaScript:

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

Esto funciona:

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

esto no

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

Chrome give s me un error de sintaxis: "Token Inexpected ILEGAL". ¿Por qué?

+1

... Porque JavaScript no es Ruby? Eso es como preguntar "¿Por qué Cobol no funciona como Ruby?". – Incognito

+6

@Incgnito um, ¿no? Me pregunto por qué es un error de sintaxis, no por qué no funciona como ruby ​​... –

+1

¿Puedes explicar el razonamiento detrás de hablar de rubí en primer lugar y mantener la coherencia con esa afirmación? – Incognito

Respuesta

35

El . después de que los dígitos representen el punto decimal del número, tendrás que usar otro para acceder a una propiedad o método.

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

Esto solo es necesario para literales decimales. Para literales octales y hexadecimales, usaría solo uno ..

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

También exponencial

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

También puede utilizar un espacio ya un espacio en un número no es válido y entonces no hay ambigüedad.

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

Aunque según lo declarado por wxactly en los comentarios de un Minifier eliminaría el espacio que causa el error de sintaxis anterior.

+0

Ah, gracias. Es interesante que también puede representar un punto decimal en Ruby, pero todavía funciona. –

+5

Voy en contra de hacer 2 puntos ya que es muy probable que cree confusión para el lector. Las parantheses son más autodescriptivas. –

+3

@AlexCoplan Supongo que porque Ruby tiene tipos enteros y float, pero JavaScript solo tiene el número – Musa

Cuestiones relacionadas