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[...]) .

14voto

Amirali Punkte 2386

Sie müssen nur Ihre Zeichenkette in einen Zeiger umwandeln, indem Sie window[<method name>] . Beispiel:

var function_name = "string";
function_name = window[function_name];

und kann nun wie ein Zeiger verwendet werden.

12voto

pouyan Punkte 3315

Hier ist mein Es6-Ansatz, der es Ihnen ermöglicht, Ihre Funktion mit ihrem Namen als String oder mit ihrem Funktionsnamen aufzurufen, und der es Ihnen auch ermöglicht, eine unterschiedliche Anzahl von Argumenten an verschiedene Arten von Funktionen zu übergeben:

function fnCall(fn, ...args)
{
  let func = (typeof fn =="string")?window[fn]:fn;
  if (typeof func == "function") func(...args);
  else throw new Error(`${fn} is Not a function!`);
}

function example1(arg1){console.log(arg1)}
function example2(arg1, arg2){console.log(arg1 + "  and   " + arg2)}
function example3(){console.log("No arguments!")}

fnCall("example1", "test_1");
fnCall("example2", "test_2", "test3");
fnCall(example3);
fnCall("example4"); // should raise an error in console

11voto

Ahmet DAL Punkte 4165

Wenn Sie eine Funktion eines Objekts anstelle einer globalen Funktion mit window["functionName"] . Sie können es so machen;

var myObject=new Object();
myObject["functionName"](arguments);

Beispiel:

var now=new Date();
now["getFullYear"]()

11voto

dykstrad Punkte 378

VORSICHTSMASSNAHMEN!!!

In JavaScript sollte man aus zwei Gründen vermeiden, eine Funktion per String aufzurufen:

Grund 1: Einige Codeverschleierer zerstören Ihren Code, da sie die Funktionsnamen ändern und die Zeichenfolge ungültig machen.

Grund 2: Es ist viel schwieriger, Code zu warten, der diese Methode verwendet, da es viel schwieriger ist, die Verwendung der Methoden zu finden, die von einer Zeichenfolge aufgerufen werden.

9voto

snnsnn Punkte 5058

Ich glaube nicht, dass Sie komplizierte Zwischenfunktionen oder eval brauchen oder von globalen Variablen wie window abhängig sind:

function fun1(arg) {
  console.log(arg);
}

function fun2(arg) {
  console.log(arg);
}

const operations = {
  fun1,
  fun2
};

operations["fun1"]("Hello World");
operations.fun2("Hello World");

// You can use intermediate variables, if you like
let temp = "fun1";
operations[temp]("Hello World");

Es funktioniert auch mit importierten Funktionen:

// mode.js
export function fun1(arg) {
  console.log(arg);
}

export function fun2(arg) {
  console.log(arg);
}

// index.js
import { fun1, fun2 } from "./mod";

const operations = {
  fun1,
  fun2
};

operations["fun1"]("Hello World");
operations["fun2"]("Hello World");

Da der Zugriff auf die Eigenschaften erfolgt, übersteht er im Gegensatz zu einigen Antworten, die Sie hier finden, eine Minimierung oder Verschleierung.

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