2012-07-17 3 views
9

En Javascript J'ai simplement test code:Comment envoyer un tableau pour fonctionner comme plusieurs arguments?

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

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

qui envoient un argument c pour fonctionner x() comme un argument, attribué à a et b séjours undefined: -/

Comment puis-je envoyer un tableau en tant que multiple arguments à une fonction, pas comme un tableau?

+0

Pourquoi vous les envelopper dans un tableau en premier lieu si vous n » Je veux un tableau? Juste faire 'x (1,2)' – TheZ

+3

@TheZ Je suis sûr que c'est juste un exemple –

+0

@JuanMendes D'accord, alors peut-être 'x (c [0], c [1])'? Je suppose que je ne comprends tout simplement pas ce qui est requis. – TheZ

Répondre

16

Découvrez apply.

Dans votre cas (puisque vous n'utilisez pas this dans la fonction), vous pouvez simplement passer window (ou this) comme "ce" argument:

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

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

Pour votre question sur le passage de null comme argument "this", voir le commentaire de MDN dans l'article lié sur l'argument "this":

Notez que cela peut ne pas être la valeur réelle vu par la méthode: si la méthode est une fonction dans le code de mode non-stricte, volonté nulle et non définie être remplacé par l'objet global, et les valeurs primitifs seront être en boîte.

+0

Merci! C'est exactement ce que je cherchais. –

+0

Ne serait pas plus agréable de passer 'null' comme premier argument, car' this' n'a rien à voir avec une telle fonction (ality) ...? –

+0

Vous pourriez, mais je crois que 'this' sera toujours' window' à l'intérieur de la fonction. –

3

Ou, dans les navigateurs avec ECMAScript 2015 (ou avec Babel transpiler), vous pouvez utiliser le nouvel opérateur de diffusion:

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

Cela ne fournit pas une réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. - [À revoir] (/ review/low-quality-posts/10184249) – andlrc

+2

@ dev-null Ceci est une réponse valide à la question.Dans ES6 [l'opérateur de propagation] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) fonctionne très semblable à Function.apply. –

Questions connexes