Erstellt dynamisch eine JavaScript-Funktion aus einem String-Namen

8

Eine Zeichenfolge classname vorausgesetzt, möchte ich dynamisch eine neue JavaScript-Funktion erstellen, die nach dieser Zeichenfolge benannt ist, die zum Instanziieren von Objekten verwendet werden kann.

Ich habe versucht, eval() zu verwenden, aber aus irgendeinem Grund erscheint die angegebene Funktion nicht im globalen Bereich (Fenster).

%Vor%

Gibt es eine Möglichkeit, dynamisch eine neue Funktion zu erstellen, die nach einem String benannt ist?

Oder geben Sie mir eine Möglichkeit, auf die erstellte Funktion zu verweisen, nachdem Sie sie über eval erstellt haben. Interessanterweise erscheint es als eine lokale Variable, wenn ich es in Safari debugge.

Aktualisierung:

Verstanden! Natürlich ist es offensichtlich, ich benutze eval erneut, um die Instanz zu erstellen:

%Vor%

Dies sollte in meinem Fall funktionieren, da ich nur eine Instanz der Klasse direkt nach der Deklaration erstellen muss. Für den allgemeinen Fall siehe Pointy's Antwort.

    
devios1 18.10.2012, 21:45
quelle

4 Antworten

9

Ja:

%Vor%

Nun, ehrlich gesagt, das ist nicht genau das, was Sie versucht haben, aber es ist ziemlich nah. Wenn Sie eine Funktion über einen function Ausdruck auf diese Weise und ohne Namen instanziieren, kann die Funktion nicht auf sich selbst verweisen, außer über den Namen im äußeren Bereich (in diesem Fall den globalen Bereich) ).

Wenn das wichtig ist, können Sie Folgendes tun: Erstellen Sie die Funktion mit einem "internen" internen Namen, und weisen Sie sie dann dem globalen Namen zu:

%Vor%     
Pointy 18.10.2012, 21:46
quelle
6
%Vor%

Dies ist zwar im Wesentlichen das gleiche wie eval() , aber es wird die Funktion in der Domäne der aktuellen Seite registrieren. Sie können dieses Skriptelement später entfernen oder für andere Funktionen wiederverwenden.

    
user797257 18.10.2012 23:22
quelle
2

Versuchen Sie Folgendes:

%Vor%     
Kevin Boucher 18.10.2012 21:48
quelle
1

Falls Sie keine neuen Funktionen basierend auf einer Zeichenfolge, sondern auf einer anderen ähnlichen Funktion erstellen möchten: (Dies ist vielleicht kein gutes Beispiel, aber ich hoffe, Sie können die Idee verstehen)

%Vor%     
Linh Dam 06.11.2015 04:04
quelle

Tags und Links