Eval() est la fonction dont vous avez besoin pour le faire, mais je vous conseille d'essayer l'une de ces choses pour minimiser l'utilisation de eval. J'espère que l'une d'entre elles aura un sens pour vous.
Enregistrez la fonction
Stockez la fonction comme une fonction, et non comme une chaîne de caractères, et utilisez-la comme une fonction plus tard. C'est vous qui décidez de l'endroit où vous stockez la fonction.
var funcForLater = clickedOnItem;
// later is now
funcForLater(t.parentNode.id);
ou
someObject.funcForLater = clickedOnItem;
// later is now
(someObject.funcForLater)(t.parentNode.id);
Nom de la fonction de stockage
Même si vous devez stocker le nom de la fonction sous forme de chaîne, vous pouvez minimiser la complexité en faisant
(eval(settings.functionName))(t.parentNode.id);
ce qui minimise la quantité de Javascript que vous devez construire et évaluer.
Dictionnaire des manipulateurs
Placez toutes les fonctions d'action dont vous pourriez avoir besoin dans un objet, et appelez-les à la manière d'un dictionnaire en utilisant la chaîne de caractères.
// global
itemActions = { click: clickedOnItem, rightClick: rightClickedOnItem /* etc */ };
// Later...
var actionName = "click"; // Or wherever you got the action name
var actionToDo = itemActions[actionName];
actionToDo(t.parentNode.id);
(Note mineure : si au lieu de cela vous avez utilisé la syntaxe itemActions[actionName](t.parentNode.id);
alors la fonction serait appelée comme une méthode de itemActions
.)
0 votes
Quel type est
settings.functionName
?