9
votes

Y a-t-il un moyen de gérer des fonctions indéfinies appelées en JavaScript?

Si j'ai une fonction comme suit: xxx

et je fais quelque chose de stupide comme xxx

quand foo n'est pas défini , Y a-t-il une manière que je puisse avoir ma fonction de capture appelée, avec nom étant «FOO» et des arguments étant un tableau contenant 'bar »?


0 commentaires

3 Réponses :


0
votes
someFunctionThatMayBeUndefinedIAmNotSure ? someFunctionThatMayBeUndefinedIAmNotSure() : throw new Error("Undefined function call");

0 commentaires

6
votes
try {
 foo();
}
catch(e) {
   callUndefinedFunctionCatcher(e.arguments);
}
UPDATEDpassing e.arguments to your function will give you what you tried to pass originally.

4 commentaires

Arguments n'est pas une propriété de l'objet Erreur , il s'agit d'une propriété de fonctions. Dans votre exemple E est un objet d'erreur et donc e.arguments non défini.


Je pense que c'est juste ce genre de vérification de la stratégie de la capture - toutes les personnes veulent s'en sortir.


Je viens de courir ce qui suit dans Chrome: essayez {bar ('foo'); } attraper (e) {alerte (e.arguments); Pour (x in e) {alerte (x)}} il alerte "foo", puis alerte les "arguments" comme une propriété de E. Suis-je fou? Ou tout simplement mal?


Essayer / attraper dans JS n'est pas toujours une bonne idée, spécialement s'il y a des fonctions asynchrones à l'intérieur du bloc. Vérifiez Stackoverflow.com/Questtions/3677783/...



10
votes

Il y a dans Mozilla JavaScript 1.5 de toute façon (c'est non standard).

Vérifiez ceci: xxx

joli cool. Lire la suite à https://developer.mozilla.org/fr/core_javascript_1. 5_Reference / Global_Objects / Objet / Noschmethod


3 commentaires

C'est très cool et presque exactement ce que je cherchais - y a-t-il un équivalent qui fonctionne dans IE 6+?


En décembre 2015, il s'agit d'une fonction obsolète qui ne devrait plus être utilisée.


@ Loïc Que doit être utilisé alors?