10
votes

Utilisez une variable JavaScript comme nom de la fonction?

J'ai le code suivant dans JavaScript:

jQuery(document).ready(function(){
    var actions = new Object();
    var actions;
    actions[0] = 'create';
    actions[1] = 'update';
    for (key in actions) {
        // Dialogs
        var actions[key]+Dialog = function(){
            $('#'+actions[key]+'dialog').dialog('destroy');
            $('#'+actions[key]+'dialog').dialog({
                resizable: false,
                height:600,
                width:400,
                modal: true,
                buttons: {
                    Cancel: function() {
                        $(this).dialog('close');
                    }
                }
            });
        };
    }
});


0 commentaires

5 Réponses :


6
votes

Comme ceci: xxx pré>

Toutefois, car les fonctions JavaScript capturent des variables par référence, votre code ne fonctionnera pas comme prévu.
Vous devez définir la fonction interne à l'intérieur d'une fonction distincte de sorte que chacun obtient une touche code> distincte code> variable (ou paramètre). P>

Par exemple: P>

var actionNames = [ 'create', 'update' ];   //This creates an array with two items

for (var i = 0; i < actionNames.length; i++) {
    this[actionNames[i] + 'Dialog'] = createAction(actionNames[i]);
}


4 commentaires

-1. Avez-vous lu la question? Je souhaite un nom de fonction variable, pas une clé de réseau variable.


Les variables variables sont sales. Ils ne sont que des méchantes syntaxes qui atteignent le même effet que d'utiliser un tableau ou un objet, mais avec moins d'organisation. Pourquoi vous opposez-vous à organiser les fonctions d'un objet ou d'une matrice?


@Alexander: Vous devez le mettre à l'intérieur d'un objet. Si vous souhaitez créer des globaux, vous pouvez les mettre à l'intérieur de la fenêtre .


Ma tâche est de faire des fonctions avec les noms de mise à jour des noms, créatedialog. Pas d'autres façons.



1
votes

Vous aurez besoin d'une référence à l'objet de la portée dans laquelle vous souhaitez créer les fonctions. Si c'est la portée globale, vous pouvez utiliser fenêtre : xxx


0 commentaires

0
votes

JavaScript Global Scope est la fenêtre, vous pouvez donc écrire:

var funcName='varfuncname';
    window[funcName]=function() {
    alert('HI!');
}


0 commentaires

0
votes

Vous devez combiner les réponses de Slaks 'et Rotora: xxx

puisque vous l'exécutez dans le gestionnaire d'événements du document, la variable "Cette" référence ferait référence au document, et non au fenêtre.


0 commentaires

0
votes

Je pense que vous essayez de faire quelque chose que vous n'avez pas besoin de faire en JavaScript. En PHP, la fonction de fonction est un peu d'un kilométrage. En JavaScript, il est élégant et sans douleur.

Comment comptez-vous appeler ces fonctions plus tard? Je suppose que vous avez ces noms de fonction à votre code HTML dans les attributs 'OnClick'. JavaScript de codage rigide dans votre HTML via le On * attributs est une mauvaise idée. Si c'est ce que vous faites, vous devez créer des variables dans la portée globale (une autre pratique mieux évitée). Dans le navigateur, l'objet global est fenêtre . Si vous définissez une propriété sur fenêtre , la fonction sera disponible globalement: xxx

Ceci suppose que vous avez onclick Attributs de votre HTML qui correspond aux noms de fonctions que vous créez.

Un meilleur moyen de le faire serait de créer les fonctions que vous les liez dans les événements, ne les attribuez jamais à des variables. : xxx

Cela rendra votre JavaScript et votre HTML plus petit et plus propre.


0 commentaires