1267 Stimmen

Wie führe ich eine JavaScript-Funktion aus, wenn ich ihren Namen als String habe?

Ich habe den Namen einer Funktion in JavaScript als String. Wie wandle ich diesen in einen Funktionszeiger um, damit ich ihn später aufrufen kann?

Je nach den Umständen kann es erforderlich sein, der Methode auch verschiedene Argumente zu übergeben.

Einige der Funktionen können die folgende Form haben namespace.namespace.function(args[...]) .

0voto

Hugo R Punkte 1933

Sie müssen lediglich einen Kontext verwenden oder einen neuen Kontext definieren, in dem sich Ihre Funktion(en) befinden. Sie sind nicht beschränkt auf window["f"]();

Hier ist ein Beispiel dafür, wie ich einige dynamische Aufrufe für einige REST-Dienste verwende.

/* 
Author: Hugo Reyes
@ www.teamsrunner.com

*/

    (function ( W, D) { // enclose it as self invoking function to avoid name collisions.

    // to call function1 as string
    // initialize your FunctionHUB as your namespace - context
    // you can use W["functionX"](), if you want to call a function at the window scope.
    var container = new FunctionHUB();

    // call a function1 by name with one parameter.

    container["function1"](' Hugo ');

    // call a function2 by name.
    container["function2"](' Hugo Leon');

    // OO style class
    function FunctionHUB() {

        this.function1 = function (name) {

            console.log('Hi ' + name + ' inside function 1')
        }

        this.function2 = function (name) {

            console.log('Hi' + name + ' inside function 2 ')
        }
    }

})(window, document); // in case you need window context inside your namespace.

Wenn Sie die gesamte Funktion aus einer Zeichenkette erzeugen wollen, ist das eine andere Antwort. Beachten Sie bitte auch, dass Sie nicht auf einen einzigen Namensraum beschränkt sind, wenn Ihr Namensraum als my.name.space.for.functions.etc.etc.etc der letzte Zweig Ihres Namensraums enthält die Funktion als my.name.space.for.functions.etc.etc["function"]();

Ich hoffe, es hilft. H.

0voto

SJ00 Punkte 598

Desde eval() ist böse, und new Function() ist nicht der effizienteste Weg, um dies zu erreichen, hier ist eine schnelle JS-Funktion, die die Funktion von seinem Namen in String zurückgibt.

  • Funktioniert bei Funktionen mit Namensraum
  • Rückgriff auf die Null-Funktion im Falle einer ungültigen/undefinierten Zeichenkette
  • Fallback auf Null-Funktion, wenn die Funktion nicht gefunden wird

    function convertStringtoFunction(functionName){
    
        var nullFunc = function(){}; // Fallback Null-Function
        var ret = window; // Top level namespace
    
        // If null/undefined string, then return a Null-Function
        if(functionName==null) return nullFunc;
    
        // Convert string to function name
        functionName.split('.').forEach(function(key){ ret = ret\[key\]; });
    
        // If function name is not available, then return a Null-Function else the actual function
        return (ret==null ? nullFunc : ret);
    
    }

Verwendung:

    convertStringtoFunction("level1.midLevel.myFunction")(arg1, arg2, ...);

0voto

DevAshish Punkte 11

Das funktioniert bei mir:

var command = "Add";
var tempFunction = new Function("Arg1","Arg2", "window." + command + "(Arg1,Arg2)");
tempFunction(x,y);

Ich hoffe, das funktioniert.

-1voto

Ithar Punkte 3987

Ohne Verwendung von eval('function()') können Sie eine neue Funktion erstellen, indem Sie new Function(strName) . Der folgende Code wurde mit FF, Chrome und IE getestet.

<html>
<body>
<button onclick="test()">Try it</button>
</body>
</html>
<script type="text/javascript">

  function test() {
    try {    
        var fnName = "myFunction()";
        var fn = new Function(fnName);
        fn();
      } catch (err) {
        console.log("error:"+err.message);
      }
  }

  function myFunction() {
    console.log('Executing myFunction()');
  }

</script>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X