javascript - tipos - Función de llamada con matriz de argumentos
pasar parametros a una funcion javascript desde html (2)
Esta pregunta ya tiene una respuesta aquí:
¿Puedo llamar a una función con una variedad de argumentos de una manera conveniente en JavaScript?
Ejemplo:
var fn = function() {
console.log(arguments);
}
var args = [1,2,3];
fn(args);
Necesito que los arguments sean [1,2,3] , al igual que mi matriz.
Debes utilizar apply :
var fn = function() {
console.log(arguments);
};
var args = [1,2,3];
fn.apply(null, args);
Aplicar hará la llamada de función equivalente:
fn(1,2,3);
Tenga en cuenta que usé null como el primer argumento de apply , que establecerá this palabra clave en el objeto global ( window ) dentro de fn .
Además, debe saber que el objeto de arguments no es realmente una matriz, es un objeto de tipo matriz, que contiene índices numéricos correspondientes a los argumentos que se utilizaron para llamar a su función, una propiedad de length que le proporciona el número de argumentos utilizados, y la propiedad arguments.callee que es una referencia a la función de ejecución (útil para la recursión en funciones anónimas).
Si desea crear una matriz a partir de su objeto de arguments , puede usar el método Array.prototype.slice :
var fn = function() {
var args = Array.prototype.slice.call(arguments);
console.log(args);
};
Edición: en respuesta a su comentario, sí, podría usar el método de shift y establecer su valor devuelto como el contexto (la palabra clave) en su función:
fn.apply(args.shift(), args);
Pero recuerde que shift eliminará el primer elemento de la matriz original, y se llamará a su función sin ese primer argumento.
Si aún necesita llamar a su función con todos sus otros argumentos, puede:
fn.apply(args[0], args);
Y si no desea cambiar el contexto, simplemente puede extraer el primer argumento dentro de su función:
var fn = function() {
var args = Array.prototype.slice.call(arguments),
firstArg = args.shift();
console.log(args, firstArg);
};
En ECMAScript 6, puede usar la sintaxis de propagación ( ... ) para ese propósito. Es mucho más simple y fácil de entender que Function.prototype.apply() .
Ejemplo de código:
const fn = function() {
console.log(arguments);
}
const args = [1,2,3];
fn(...args);