2010-05-18 6 views

Répondre

294
const args = ['p0', 'p1', 'p2']; 
call_me.apply(this, args); 

Voir les documents MDN pour Function.prototype.apply().


Si l'environnement prend en charge ECMAScript 6, vous pouvez utiliser un spread argument à la place:

call_me(...args); 
+4

En note, Si quelqu'un veut passer un tableau associatif (nommé keys) à la place, alors utilisez un objet. Venant de PHP (et toujours conduit à ce fil par google) cela m'a pris un moment pour comprendre. Vous pouvez passer l'objet entier comme paramètre alors. http://www.w3schools.com/js/js_objects.asp – timhc22

+0

Merci d'avoir signalé l'argument 'spread'! Je ne savais pas à ce sujet. –

66

Pourquoi passez-vous pas le tableau complet et le processus au besoin dans la fonction?

var x = [ 'p0', 'p1', 'p2' ]; 
call_me(x); 

function call_me(params) { 
    for (i=0; i<params.length; i++) { 
    alert(params[i]) 
    } 
} 
+31

C'est parce que je ne peux pas modifier call_me(). Il est défini dans une autre bibliothèque et il n'est pas possible de jouer avec l'API. – Robert

+43

+1 parce que même s'il ne répond pas à la question initiale, c'est probablement ce que recherchaient les 100K + personnes qui ont consulté cette page. – Ishikawa

+0

Quelqu'un peut-il expliquer ce que fait la ligne "call_me (x)"? Il semble que c'est un nom de fonction sans le mot-clé de la fonction? Que fait-il exactement? – swam

40

En supposant que call_me est une fonction globale, vous ne vous attendez pas à ce que cela soit défini.

var x = ['p0', 'p1', 'p2']; 
call_me.apply(null, x); 
5

Comme @KaptajnKold avait répondu

var x = [ 'p0', 'p1', 'p2' ]; 
call_me.apply(this, x); 

Et vous n'avez pas besoin de définir tous les paramètres pour la fonction call_me soit. Vous pouvez simplement utiliser arguments

function call_me() { 
    // arguments is a array consisting of params. 
    // arguments[0] == 'p0', 
    // arguments[1] == 'p1', 
    // arguments[2] == 'p2' 
} 
+2

Ceci est une mauvaise pratique ... vous ne serez pas en mesure de voir ce que la fonction a besoin et tous les paramètres sont facultatifs si vous regardez la fonction. – Robin

4

Notez cette

function FollowMouse() { 
    for(var i=0; i< arguments.length; i++) { 
     arguments[i].style.top = event.clientY+"px"; 
     arguments[i].style.left = event.clientX+"px"; 
    } 

}; 

// -------------------------- -

page html

<body onmousemove="FollowMouse(d1,d2,d3)"> 

<p><div id="d1" style="position: absolute;">Follow1</div></p> 
<div id="d2" style="position: absolute;"><p>Follow2</p></div> 
<div id="d3" style="position: absolute;"><p>Follow3</p></div> 


</body> 

peut appeler la fonction avec Args

toute
<body onmousemove="FollowMouse(d1,d2)"> 

ou

<body onmousemove="FollowMouse(d1)"> 
+0

Cela fait clairement partie de la réponse. "arguments" est certainement nécessaire pour récupérer le tableau après l'appel. Merci! – FlorianB

25

Il y a une nouvelle spread operator... qui fait exactement cela.

call_me(...x) 

Il est standardisé à partir de ES6 mais n'est pas encore supporté par IE.

-7

1 vous pouvez rejoindre le tableau dans une chaîne
2 passes pour fonctionner
3 Appel dédoublé

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
function myFunction(name) 
{ 
    var nameArray = name.split(','); 
. 
. 
. 
} 

méthode d'appel:

myFunction(fruits.join(',')); 

ou même

myFunction("orange,Apple,fruits"); 
Questions connexes