JavaScript-Aufruffunktion in einer Funktion nach dem Variablennamen [duplizieren]

8

Ich habe Schwierigkeiten, eine Funktion innerhalb einer anderen Funktion aufzurufen, wenn ihr Name in einer Variablen steht:

%Vor%

Ich habe versucht, [x]() mit verschiedenen Scope-Pfaden zu versehen, aber bisher ohne Erfolg. Die Suche nach vorhandenen Antworten ergab nichts. Es funktioniert mit this[x]() , wenn b() direkt innerhalb des inneren Objekts platziert wird. Ich möchte b() als Funktion innerhalb von function a() behalten, da der Variablenumfang in function a() liegt, sonst müsste ich viele Parameter an b() übergeben.

//// Re doppelte Frage: Quentin lieferte eine elegantere Antwort in diesem Thread imo.

    
Gonki 13.01.2014, 10:55
quelle

6 Antworten

15

Es gibt keine vernünftige Möglichkeit, auf eine beliebige Variable zuzugreifen, indem eine Zeichenfolge verwendet wird, die dem Namen der Variablen entspricht. (Für eine sehr schlechte Möglichkeit, dies zu tun, siehe eval ).

  

[x](); // FUNKTIONIERT NICHT

Sie versuchen, ein Array als Funktion aufzurufen

  

WEDER this[x]()

Die Funktion ist keine Eigenschaft des Objekts inner .

  

window[x]() , usw.

Da es kein globales Objekt ist, ist es auch keine Eigenschaft des window-Objekts.

Wenn Sie eine Funktion basierend auf dem Wert einer String-Variablen aufrufen müssen, organisieren Sie Ihre Funktionen in einem Objekt und greifen Sie darauf zu.

%Vor%     
Quentin 13.01.2014, 10:58
quelle
3

Versuchen Sie es. Derzeit weisen Sie der Variablen x statt einer Funktionsvariablen einen String zu.

%Vor%     
Mahesh Sapkal 13.01.2014 10:58
quelle
2

Das Problem liegt in Ihrer Aufgabe

Verwenden Sie x = b anstelle von x = 'b' , um das Funktionsobjekt zuzuweisen, da letzteres die Zeichenfolge nur x zuordnet.

Sobald Sie Ihre Aufgabe behoben haben, können Sie die Funktion als

aufrufen %Vor%

usw.

    
user3189921 13.01.2014 11:05
quelle
2

Sie sollten ein Array für die Funktion erstellen und dann wie folgt auf den Namen in Ihrer Variablen zugreifen:

%Vor%     
Bhavesh Kachhadiya 13.01.2014 11:08
quelle
1

Die Funktionsdeklaration b wird im Abschluss des anonymen Funktionsausdrucks erfasst, der als a zugewiesen wurde.

  1. Wenn var in einer Closure verwendet wird, gibt es kein (verfügbar in JavaScript ) Objekt , dem eine Eigenschaft zugewiesen wird, die der von window in ähnlich ist der globale Geltungsbereich .
  2. Eine Funktionsdeklaration effektiv schreiben var s der Name der Funktion .

Wenn Sie wirklich auf eine Variable (zB b ) mit String zugreifen möchten, müssen Sie entweder ein Objekt erstellen, das b ähnlich wie which enthält Sie haben für a getan, oder (und möglicherweise gefährlich) verlassen sich auf eval , um "b" in b zu konvertieren.

Wenn Sie nicht das gesamte Objekt im Voraus erstellen können, können Sie dieses Format verwenden

%Vor%     
Paul S. 13.01.2014 11:02
quelle
1

Nehmen wir an, Ihr Code ist wie folgt:

%Vor%

Dann könnte Ihre Lösung so aussehen:

%Vor%     
Mehran Hatami 13.01.2014 11:03
quelle