2012-03-24 10 views
5

En algunos proyectos que trabajo, se añadieron algunos bloques con esta sintaxis:alternativas de JavaScript

var [code, name] = input.split("/"); 
console.log(code); 
console.log(name); 

me gusta mucho esto, es tan simple y pequeño. Es cierto que puedo hacer esto usando otra sintaxis como:

var code_name = input.split("/"); 
console.log(code_name[0]); 
console.log(code_name[1]); 

embargo, algunos navegadores como Google Chrome y Opera no te apoyar esta "característica". ¿Alguien sabe si esta es una característica futura de JS o está en desuso? En caso de ser obsoleto, ¿existe alguna alternativa perfecta para el primer caso?

Gracias por todo.

+2

Ver esta respuesta: http://stackoverflow.com/a/3422473/218196 –

Respuesta

2

No es tan agradable como el código que usted propuso, pero creo que se ve bastante bien, sin embargo, aunque tiene que hacer algunas soluciones:

En primer lugar, la idea es hacer una sintaxis limpia para llamar a esta función, tales como:

[5,4,3,2,1].list(a,b,c,d,e); 

La idea es que a, b, c, d, e se modifican por referencia.

Dado que las variables se pasan como valor y solo los objetos se pasan por referencia, las variables a, b, c, d, e deben ser objetos.

var a=Object(),b=Object(),c=Object(),d=Object(),e=Object(); 

Una vez que están los objetos, que son capaces de modificar su valor de referencia (como se explica aquí http://sirdarckcat.blogspot.com.ar/2007/07/passing-reference-to-javascript.html)

(function(val){if(val)this.valueOf=this.toSource=this.toString=function(){return val};return val;}).call(myVariable,'MyNewValue') 

Así, envolviéndolo en una función "lista" que se extiende de la matriz. prototipo, terminé con esto:

 Array.prototype.list = function(){ 
      for(var i=0;i<this.length;i++){ 
       (function(val){if(val)this.valueOf=this.toSource=this.toString=function(){return val};return val;}).call(arguments[i],this[i]) 
      } 
     } 

objetos por eso, cuando se llama a [5,4,3,2,1].list(a,b,c,d,e); en realidad se está modificando por referencia (y el resultado será un objeto también).

Aquí está el código completo de trabajo:

<!DOCTYPE html> 

<html> 
    <head><title>test</title> 
     <script type="text/javascript"> 
      Array.prototype.list = function(){ 
       for(var i=0;i<this.length;i++){ 
        (function(val){if(val)this.valueOf=this.toSource=this.toString=function(){return val};return val;}).call(arguments[i],this[i]) 
       } 
      } 
     </script> 
    </head> 
    <body> 
     <a id="test" href="#">test</a> 
     <script type="text/javascript"> 
      var a=Object(),b=Object(),c=Object(),d=Object(),e=Object(); 
      [5,4,3,2,1].list(a,b,c,d,e); 
      console.log(a,b,c,d,e); 
     </script> 
    </body> 
</html> 
+0

1 para tratar de resolver el problema. Sin embargo, tenga en cuenta: podría simplemente inicializar como 'var a = {}'. – jrharshath