obtenir le nom de la fonction courante dans javascript

j'ai ce morceau de code:

function MyFunction()
{
    $.ajax({
        type: "POST",
        url: "ajax.php",
        dataType: "json",
        data: "foo=bar",
        error:function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert(arguments.callee);
        },
        success: function(jsonObject)
        {
            //do something
        }
    });
}

ce que je veux c'est que l'alerte à l'intérieur de de error scoope montre le nom de la fonction, dans ce cas "MyFunction" mais à la place ce que je reçois est la fonction error:function.

Comment puis-je y parvenir?

16
demandé sur Sourav Ghosh 2011-07-05 22:11:05

7 réponses

-

var my_arguments;

function MyFunction() {
    my_arguments = arguments;

    $.ajax({
        type: "POST",
        url: "http://www.google.com",
        dataType: "json",
        data: "foo=bar",
        error:function(XMLHttpRequest, textStatus, errorThrown) {
            alert(my_arguments.callee.name);
        },
        success: function(jsonObject) {
            //do something
        }
    });
}

est ce que vous avez besoin.

arguments dans le error fonction fait référence à cette méthode est propre arguments objet. Il ne fait pas référence à la fonctionarguments objet. C'est pourquoi vous obtenez error:MyFunction. L'utilisation d'une variable globale dans ce cas vous fournit une solution à ce problème.

Aussi, pour obtenir que le nom de la fonction, vous devez utiliser arguments.callee.name. arguments.callee va vous donner une référence à la fonction d'appel, pas un nom de la fonction dans la chaîne de caractères.

18
répondu MD Sayem Ahmed 2013-12-26 15:03:37

Ce que vous voulez, c'est arguments.callee.name toutefois, dans votre cas, la fonction dans le contexte plus MyFunction mais la méthode anonyme s'est déclarée comme le gestionnaire d'erreurs...

6
répondu Variant 2011-07-05 18:15:54

en mode strict, vous ne pouvez plus faire référence à callee (voir la discussion à Javascript: le tableau d'arguments est-il déprécié?) , donc la réponse de @Sayem n'est valable que si vous n'utilisez pas le mode strict. En général, vous souhaitez invoquer le mode strict en raison de ses avantages pour la fiabilité de votre code (voir @Johnressig article