J'ai un fichier avec une liste de fonction comme ci-dessous
export function today() {} export function yesterday() {} export function tomorrow() {} export function out(input) { input() }
l'entrée est le nom de la fonction et il pourrait s'agir de demain
, aujourd'hui Fonctions
ou hier
.
J'ai juste besoin d'appeler dynamiquement aujourd'hui
, hier
, demain
fonctions.
4 Réponses :
function func_abc() { alert("abc"); } function call_others(function_name) { if (function_name == "abc") { func_abc(); } } call_others("abc"); You can do this or use switch statement
var funcstr = "f1"; x[funcstr]();
Vous avez essentiellement deux options. Effectuez une recherche à l'aide d'une carte ou déplacez les fonctions référencées dans un autre fichier et effectuez une importation générique à partir de là. (qui est essentiellement le même)
1. Avec une recherche
export function today() {} export function yesterday() {} export function tomorrow() {}
2. Divisez votre code en deux fichiers. index.js et fns.js
index.mjs
import * as lookup from './fns' export function out(input) { lookup[input]() }
fns.mjs
const lookup = {today, yesterday, tomorrow} export function today() {} export function yesterday() {} export function tomorrow() {} export function out(input) { lookup[input]() }
p >
Comme commenté, vous devrez créer une carte et en utilisant cela, vous pourrez appeler les fonctions.
Vous pouvez essayer l'une des approches suivantes:
Avantage de cette approche est que vous avez une seule exportation, vous savez donc tout ce que vous exportez. Cependant, vous devrez faire défiler vers le haut et vers le bas pour voir la définition, si le fichier grossit. De plus, vous saignez tout, donc out (...)
peut appeler n'importe quelle fonction, donc inutile de les exporter individuellement
export function today() {} export function yesterday() {} export function tomorrow() {} const actionMap = { TODAY: today, YESTERDAY: yesterday, TOMORROW: tomorrow } export function out(input) { actionMap[input](); }
C'est une approche plus recommandable. Ici vous avez une carte des actions possibles. Donc, vous limitez également les entrées possibles. Cela vous permettra également d'avoir des noms plus significatifs pour l'action et la fonction. L'inconvénient serait de devoir maintenir une liste. Donc pour chaque nouvelle action, vous devrez mettre à jour cette liste
function today() {} function yesterday() {} function tomorrow() {} function out(input) { module[input](); } var module = { today, yesterday, tomorrow, out } export module;
@FarshadFahimi vient de Google Eval is evil avant de le faire. Le repos est à vous mon pote.
Créez une carte des fonctions possibles et appelez
possibleMap [input] ()
Veuillez partager ce que vous avez fait jusqu'à présent.