2
votes

Exécuter la fonction dynamiquement dans es6

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.


2 commentaires

Créez une carte des fonctions possibles et appelez possibleMap [input] ()


Veuillez partager ce que vous avez fait jusqu'à présent.


4 Réponses :


0
votes
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

0 commentaires

0
votes
var funcstr = "f1";
x[funcstr]();

0 commentaires

1
votes

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 >


0 commentaires

2
votes

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:

Exportation unique

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]();
}

Carte de fonction possible

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;


1 commentaires

@FarshadFahimi vient de Google Eval is evil avant de le faire. Le repos est à vous mon pote.