Esta pregunta se puede tratar de diversas formas, pero en este caso te mostramos la que en nuestra opinión es la solución más completa.
Solución:
arguments
se dice que es un objeto tipo Array. Como ya viste puedes acceder a sus elementos por índice, pero no tienes todos los métodos Array a tu disposición. Otros ejemplos de objetos tipo Array son las colecciones HTML devueltas por getElementsByTagName() o getElementsByClassName(). jQuery, si alguna vez lo ha usado, también es un objeto tipo Array. Después de consultar algunos objetos DOM, inspeccione el objeto jQuery resultante con Firebug en la pestaña DOM y verá lo que quiero decir.
Aquí está mi solución para el problema de Meebo:
function conc()
if (arguments.length === 0)
return "";
else
return Array.prototype.slice.call(arguments).join(" ");
alert(conc("a", "b", "c"));
Array.prototype.slice.call(arguments)
es un buen truco para transformar nuestro arguments
en un verdadero objeto Array. en firefox Array.slice.call(arguments)
sería suficiente, pero no funcionará en IE6 (al menos), por lo que la versión anterior es la que generalmente se usa. Además, este truco no funciona para la recopilación devuelta por los métodos DOM API en IE6 (al menos); arrojará un error. Por cierto, en lugar de call
uno podría usar apply
.
Una pequeña explicación sobre los objetos tipo Array. En JavaScript, puede usar casi cualquier cosa para nombrar a los miembros de un objeto, y los números no son una excepción. Por lo tanto, puede construir un objeto que se vea así, que es JavaScript perfectamente válido:
var Foo =
bar : function()
alert('I am bar');
,
0 : function()
alert('I am 1');
,
length : 1
El objeto anterior es un objeto tipo Array por dos razones:
- Tiene miembros cuyos nombres son números, por lo que son como índices de matriz
- Tiene un
length
propiedad, sin la cual no puede transformar el objeto en un verdadero Array con la construcción:Array.prototype.slice.call(Foo);
El objeto arguments de un objeto Function es bastante parecido al objeto Foo, solo que tiene un propósito especial.
Mozilla sobre el tema:
El objeto arguments no es un array. Es similar a un arraypero no tiene ninguna array
propiedades excepto la longitud. Por ejemplo, no tiene el método pop. Sin embargo, se puede convertir en un verdadero
array:var args = Array.prototype.slice.call(arguments);
Por lo tanto, la solución a su problema es bastante simple:
var string = Array.prototype.slice.call(arguments).join("");
Por cierto: además establece:
El objeto arguments es una variable local disponible dentro de todas las funciones; Los argumentos como propiedad de Function ya no se pueden usar.
Solo debes usar arguments
en vez de func.arguments
Esto funciona:
function concatenate()
return [].join.call(arguments, "");
alert(concatenate("one", "two", "three"));