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.
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%Versuchen Sie es. Derzeit weisen Sie der Variablen x statt einer Funktionsvariablen einen String zu.
%Vor%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.
Sie sollten ein Array für die Funktion erstellen und dann wie folgt auf den Namen in Ihrer Variablen zugreifen:
%Vor% Die Funktionsdeklaration b
wird im Abschluss des anonymen Funktionsausdrucks erfasst, der als a
zugewiesen wurde.
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 . 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%Nehmen wir an, Ihr Code ist wie folgt:
%Vor%Dann könnte Ihre Lösung so aussehen:
%Vor%Tags und Links javascript function object dynamic