2012-10-01 12 views
5

¿Hay alguna restricción de su navegador o cualquier otro problema que me impide hacer:¿Es necesario convertir argumentos a Array antes de llamar a apply?

fn.apply(this, arguments); 

frente:

fn.apply(this, Array.prototype.slice.call(arguments)); 

Sé que apply toma un "verdadero" Array como segundo argumento, pero el paso de una la recolección de argumentos parece funcionar igual de bien. o...?

Respuesta

4

Según el MDN, "Llama a una función con un determinado valor y argumentos proporcionados como una matriz (o una matriz como objeto)". Dado que arguments es un objeto similar a una matriz, no debería haber ninguna restricción al usarlo.

De hecho, el description dice explícitamente arguments es un parámetro válido.

+1

Pensé lo mismo, pero sigo viendo 'Array.prototype.slice.call (arguments)' en tantos ejemplos de código "profesional", pensé que debe haber una razón válida ... – David

+0

Es necesario si quieres para hacer operaciones de Array en ellos, como append, shift o push, por lo que la mayoría de los desarrolladores que conozco lo hacen más por costumbre que cualquier otra cosa. – saml

0

El soporte es unknown en MDN.

Solo se sabe que Firefox acepta objetos similares a Array para el segundo argumento de Function.prototype.apply(). Me gustaría tener cuidado antes de pasar arguments directamente.

Cuestiones relacionadas