Pourquoi je ne peux pas appeler une méthode de la baie sur une fonction d'arguments?
J'ai une fonction qui peut accepter un nombre quelconque d'arguments...
const getSearchFields = () => {
const joined = arguments.join('/');
};
Je veux une chaîne de tous les arguments passés à la fonction rejoint avec le /
caractère. Je reçois cette erreur:
args.jointure n'est pas une fonction
Quelqu'un peut-il me dire ce que je fais mal?
- Pourquoi le modifier pour utiliser ES6 syntaxe?
- Senti quand j'ai été mise à jour. Je pense qu'il y a des arguments valables contre de le faire, si c'est ce que vous êtes allusion à la.
- Je ne sais pas vraiment, tout semble un peu étrange quand les réponses à partir de 2009 sont dans l'ES3. Je ne suis pas ici depuis assez longtemps pour savoir si il est considéré comme bon ou mauvais pour revoir les anciennes questions de syntaxe moderne.
- Autant que je sache, il est encouragé à donner des réponses toujours up-to-date, même si la question de quelques jours. Dans ce cas, maintenant, la question est moins daté.
- J'ai également mis à jour ma réponse fournir une ES6 façon de le faire. Merci.
- Wow, vous êtes de retour 🙂
Vous devez vous connecter pour publier un commentaire.
arguments
est un pseudo-tableau, pas un vrai. Lejoin
méthode est disponible pour les tableaux.Vous aurez besoin de tricher:
Similaire à d'autres postes, vous pouvez effectuer les opérations suivantes raccourci:
var convertedArray = Array.prototype.slice.call(arguments);
Que tout est dit ci-dessus, les arguments de l'objet n'est pas vraiment un tableau, mais vous pouvez appliquer les fonctions de tableau directement, en accédant au Tableau.prototype et de les exécuter avec appliquer ou appel pour modifier le contexte:
Modifier: Depuis la première question posée près de 9 ans a été mis à jour pour utiliser ES6 syntaxe, je ressens le besoin de fournir une ES6 répondre maintenant le langage natif de constructions pour gérer ce genre de situations.
L'ES6 norme introduit la propagation de l'opérateur, que vous pouvez facilement utiliser pour recevoir les arguments dans un tableau d'objet, par exemple:
JS:
Appliqué à votre exemple:
Vous pouvez également utiliser la propagation de l'opérateur à faire des appels de fonction, disons que vous avez un tableau, et que vous voulez appeler une fonction, en passant chaque élément du tableau comme argument de la fonction d'appel, vous pouvez maintenant simplement:
JS:
Aussi vous pouvez vous attendre à certains arguments et ont la reste des arguments passés
comme le dernier paramètre défini:
Et il y a plus d'utilisations de la propagation opérateur qui vont au-delà de la portée de cette question, par exemple objet de copie, de diffusion des tableaux dans des tableaux, etc...
Si vous utilisez jQuery 1.2+, vous pouvez utiliser
$.makeArray()
:À partir de l'exemple de la question, il suffit d'utiliser cette ligne de
arguments n'est pas vraiment un tableau.
essayez ceci:
Le problème est que
arguments
est un tableau d'objet de type (il a numéroté des propriétés de la cartographie pour les arguments passés et unlength
de la propriété), mais il fait n'est pas un tableau.Dans les vieux jours, vous pouvez le faire dans un vrai tableau avec
Array.prototype.slice.call(arguments)
(parmi d'autres méthodes).Cependant, nous sommes un peu plus de chance ces jours-ci (en fonction de vos plateformes prises en charge bien sûr). Vous pouvez soit le faire...
...ou...
Le premier exemple est préféré parce que...
arguments
est une magie variable (il n'est pas explicitement défini, alors d'où vient-elle?)'use strict'
)arguments
n'est pas un tableau JavaScript; c'est un objet spécial qui n'est pas unjoin
méthode.Si vous êtes arriver pendant l'envoi de la requête http dans angular4 utilisateur HttpHeaders. Veuillez cocher ci-dessous la réponse. Après usring HttpHeaders mon problème est résolu.
des valeurs.jointure n'est pas une fonction dans le fichier http.es5.js Angulaire 4
Vous avez à faire affectation à une variable pour que cela fonctionne.