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>
Ver esta respuesta: http://stackoverflow.com/a/3422473/218196 –