Javascript ajouter un argument supplémentaire
Permet de jeter un oeil à ce code:
var mainFunction = function() {
altFunction.apply(null, arguments);
}
Les arguments qui sont passés à "mainFunction" sont dynamiques, ils peuvent être de 4 ou 10 ne marche pas question. Cependant, je dois passer à altFunction ET je dois ajouter un argument SUPPLÉMENTAIRE à la liste d'arguments.
J'ai essayé ceci:
var mainFunction = function() {
var mainArguments = arguments;
mainArguments[mainArguments.length] = 'extra data'; //not +1 since length returns "human" count.
altFunction.apply(null, mainArguments);
}
Mais cela ne semble pas fonctionner, comment puis-je faire cela?
- Qu'entendez-vous par
not +1 since length returns "human" count
? - .longueur renvoie 4 si le tableau est 0, 1, 2, 3, il ne retourne pas les 3, j'espère que vous comprenez maintenant. C'est ce que je voulais dire 😛
- Et bien oui, mais c'est le comportement attendu de
.length
. Lorsque vous utilisezarr[arr.length] = "whatever"
, c'est le même comportement que l'utilisation de.push()
, et ajoute l'élément à la fin du tableau. Votre problème, c'est quearguments
n'est pas un tableau, c'est pourquoi vous devez utiliser l'une des nombreuses solutions similaires qui ont été fournies. - En fait, vous avez presque lui. Votre code ne fonctionne que si vous aussi vous faire
arguments.length++
avant l'appel à s'appliquer.
Vous devez vous connecter pour publier un commentaire.
arguments
n'est pas un pur tableau. Vous avez besoin de faire un tableau normal hors de lui:Utilisation
Array.prototype.push
Il n'y a pas besoin de clone simple le
arguments
objet, car il et son.length
sont mutables.De ECMAScript 5, 10.6 Objet Arguments
De sorte que vous pouvez voir que
.length
est accessible en écriture, il sera mis à jour avec les méthodes de Tableau.arguments
était en lecture seule, mais ensuite, j'ai relu le MDN spec et a réalisé celaArray.prototype.push.call(arguments, 'bar')
à la place si vous avez des problèmes.arguments
, commearguments[arguments.length] = "bar";
, on dirait qu'il fonctionne, mais si vous passez quearguments
valeur à une autre fonction, parapply()
, l'ajout d'arg n'est pas passé à cette fonction. Il ne reçoit que l'original arguments.La
arguments
objet n'est pas un tableau; c'est comme un tableau, mais c'est différent. Vous pouvez la transformer en un tableau cependant:Ensuite, vous pouvez pousser un autre de valeur sur la fin:
Mise à jour de 2016: Vous devez convertir les arguments dans un tableau avant de l'ajout de l'élément. En plus de la tranche de la méthode mentionné dans un grand nombre de postes:
Vous pouvez également utiliser le Tableau.méthode from() ou la propagation de l'opérateur pour convertir des arguments à un vrai Tableau:
ou
Ci-dessus peuvent ne pas être optimisé par l'option javascript de votre moteur, il a été proposé par le MDN au suivant peut être optimisé:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
La
arguments
"tableau" n'est pas un tableau (c'est un bug de conception en JavaScript, selon Crockford), de sorte que vous ne pouvez pas le faire. Vous pouvez le mettre dans un tableau, si:arguments
a été fait pour être un Tableau comme objet et non pas un Tableau sur le but, que ce soit à bon escient ou non.Un liner pour ajouter un argument supplémentaire(s) et le retour de la nouvelle matrice:
Dans ce cas, il pourrait être plus confortable à utiliser
call()
au lieu deapply()
:var myABC = '12321';
someFunction(result, error, myCallback.bind(this, myABC));
Référence: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
Pour ceux qui comme moi a la recherche d'un moyen d'ajouter un argument qui est facultatif et peut être pas la seule omis un (
myFunc = function(reqiured,optional_1,optional_2,targetOptional)
avec l'appel commemyFunc(justThisOne)
), ce qui peut être fait comme suit: