2012-07-17 17 views
9

en Javascript que tienen sencilla test code:¿Cómo enviar una matriz para que funcione como múltiples argumentos?

function x(a, b) { 
    alert(a); 
    alert(b); 
} 

var c = [1,2]; 
x(c); 

que envían un argumento c para funcionar x() como un argumento, asignados a a y b permanece indefinido: -/

¿Cómo puedo enviar una matriz como múltiples argumentos a una función, no como una matriz?

+0

¿Por qué envolviéndolos en una matriz en primer lugar si no' ¿Quieres una matriz? Simplemente haga 'x (1,2)' – TheZ

+3

@TheZ Estoy seguro de que esto es solo un ejemplo –

+0

@JuanMendes Bien, entonces tal vez 'x (c [0], c [1])'? Supongo que simplemente no entiendo lo que se requiere. – TheZ

Respuesta

16

Consulte apply.

En su caso (ya que no se está utilizando this en la función), puede simplemente pasar window (o this) como el "este" argumento:

x.apply(this, [1, 2]); 

Ejemplo:http://jsfiddle.net/MXNbK/2/

Según su pregunta sobre pasar null como el argumento "this", consulte el comentario de MDN en el artículo vinculado sobre el argumento "this":

Tenga en cuenta que esto puede no ser el valor real que se observa por el método: si el método es una función de código de modo no estricto, nula y voluntad indefinido ser reemplazado con el objeto global, y los valores primitivos voluntad ser en caja.

+0

Gracias! Eso es exactamente lo que estaba buscando. –

+0

No sería más agradable pasar 'null' como primer argumento, ya que' this' no tiene nada que ver con esa función (ality) ...? –

+0

Podría, pero creo que 'esto' seguirá siendo' ventana' dentro de la función. –

3

O, en navegadores con ECMAScript 2015 (o con Babel transpiler), puede utilizar el nuevo operador de difusión:

x(...[1, 2]) 
+1

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. - [De la crítica] (/ review/low-quality-posts/10184249) – andlrc

+2

@ dev-null Esta es una respuesta válida a la pregunta.En ES6 [el operador de difusión] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) funciona de manera muy parecida a Function.apply. –

Cuestiones relacionadas