2012-07-17 13 views
9

in JavaScript devo semplice test code:Come inviare array per funzionare come più argomenti?

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

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

che inviano un argomento c di funzionare x() come un argomento, assegnato a a e b soggiorni undefined: -/

Come posso inviare un array come multipla argomenti a una funzione, non come una matrice?

+0

Perché avvolgendoli in un array, in primo luogo, se si don' voglio un array? Basta fare 'x (1,2)' – TheZ

+3

@TheZ Sono sicuro che questo è solo un esempio –

+0

@JuanMendes Bene, allora forse 'x (c [0], c [1])'? Immagino di non capire cosa è richiesto. – TheZ

risposta

16

Check out apply.

Nel tuo caso (dal momento che non si utilizza this nella funzione), si può semplicemente passare window (o this) come "questo" argomento:

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

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

Per la tua domanda sul passaggio di null come argomento "questo", vedi il commento di MDN nell'articolo collegato sull'argomento "questo":

noti che questo non può essere il valore effettivo visto dal metodo: se il metodo è una funzione in non-rigido codice modalità nulle e volontà indefinito essere sostituito con l'oggetto globale, e valori primitivi volontà essere in scatola.

+0

Grazie! Questo è esattamente quello che stavo cercando. –

+0

Non sarebbe meglio passare "null" come primo argomento, dato che "questo" non ha nulla in relazione con tale funzione (alità) ...? –

+0

Si potrebbe, ma credo che questo sarà ancora 'window' all'interno della funzione. –

3

Oppure, nei browser con ECMAScript 2015 (o con Babel transpiler), è possibile utilizzare l'operatore new diffusione:

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

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/post di bassa qualità/10184249) – andlrc

+2

@ dev-null Questa è una risposta valida alla domanda.In ES6 [l'operatore di spread] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) funziona molto come Function.apply. –

Problemi correlati