2010-05-18 44 views

Respuesta

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

Consulte los documentos de MDN para Function.prototype.apply().


Si el ambiente es compatible con ECMAScript 6, se puede utilizar una vez spread argument:

call_me(...args); 
+4

Como nota al margen, si alguien quiere pasar una matriz asociativa (claves con nombre), entonces use un objeto. Viniendo de PHP (y siempre guiado por este hilo por google) esto me tomó un tiempo para averiguarlo. Puede pasar todo el objeto como un parámetro a continuación. http://www.w3schools.com/js/js_objects.asp – timhc22

+0

¡Gracias por señalar el argumento 'spread'! No lo sabía –

66

¿Por qué no se pasa toda la matriz y el proceso según sea necesario dentro de la función?

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

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

Es porque no puedo modificar call_me(). Se define en alguna otra biblioteca y no es posible jugar con la API. – Robert

+43

+1 porque a pesar de que no responde la pregunta original, es probablemente lo que buscaban las más de 100 mil personas que vieron esta página. – Ishikawa

+0

¿Puede alguien explicar qué está haciendo la línea "call_me (x)"? Parece que es un nombre de función sin la palabra clave function? ¿Qué está haciendo exactamente? – swam

40

Suponiendo que call_me es una función global, por lo que no espera que se establezca.

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

Como @KaptajnKold habían respondido

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

Y que no es necesario definir los parámetros para cada función call_me tampoco. Usted sólo puede usar arguments

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

Esta es una mala práctica ... no podrá ver qué necesita la función y cada parámetro es opcional si observa la función. – Robin

4

Nota este

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

}; 

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

página 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> 

puede llamar a la función con cualquier Args

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

o

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

Esto es claramente parte de la respuesta. "argumentos" es definitivamente necesario para recuperar la matriz después de la llamada. ¡Gracias! – FlorianB

25

Hay un nuevo spread operator... que hace exactamente eso.

call_me(...x) 

Está estandarizado a partir de ES6 pero aún no es compatible con IE.

-7

1-Usted puede unirse a la matriz en una cadena
2-pasarlo a funcionar
3-Llamada dividido

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

método de llamada:

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

o incluso

myFunction("orange,Apple,fruits"); 
Cuestiones relacionadas