Instanziieren Sie eine CoffeeScript-Klasse aus einem Klassennamen in einer Zeichenfolge

8

Wie instanziiere ich eine Klasse in CoffeeScript, wenn ich nur den Namen der Klasse in einer Zeichenfolge habe?

%Vor%     
Pete BD 18.01.2012, 15:02
quelle

4 Antworten

11

Mit ein bisschen Weitsicht können Sie das ganz einfach tun und schützen Sie sich vor der Verwendung von eval . Behalten Sie eine Liste der Klassen bei, die Sie mit dem Namen instanziieren möchten:

%Vor%

und verwenden Sie dann Ihre Nachschlagetabelle anstelle von eval :

%Vor%

Wenn Sie class Dog sagen, erhalten Sie eine lokale Variable namens Dog :

%Vor%

und es gibt keine Möglichkeit, auf eine lokale JavaScript-Variable zuzugreifen, es sei denn, Sie speichern sie an einem Ort, auf den Sie mit dem Namen zugreifen können. Beachten Sie auch, dass eval nicht funktioniert, wenn Sie Dog in einer CoffeeScript-Datei definieren und auf eine andere zugreifen möchten. CoffeeScript verpackt jede Datei in self -Anonyme Funktion ausführen, um den Gültigkeitsbereich der Variablen einzuschränken :

  

Die gesamte CoffeeScript-Ausgabe ist in eine anonyme Funktion eingeschlossen: (function(){ ... })() ; Dieser Sicherheits-Wrapper, kombiniert mit der automatischen Generierung des Schlüsselworts var , macht es äußerst schwierig, den globalen Namensraum aus Versehen zu verschmutzen.

     

Wenn Sie Top-Level-Variablen für andere Skripte erstellen möchten, hängen Sie sie als Eigenschaften an window oder an das exports -Objekt in CommonJS an.

    
mu is too short 18.01.2012, 19:18
quelle
3

Kann man mit CommonJS-Modulen so etwas machen?

Datei: Dog.coffee

%Vor%

Datei: Cat.coffee

%Vor%

Datei: Main.coffee

%Vor%     
Pete BD 20.01.2012 11:33
quelle
1

Denken Sie daran, das ist nicht sehr guter Code, aber ich konnte mir keinen besseren Weg vorstellen.

Verwenden von eval :

%Vor%

Ich werde weiter nachdenken.

    
Jivings 18.01.2012 15:12
quelle
0

Wie wäre es damit?

dog.coffee

%Vor%

app.coffee

%Vor%     
nonocast 14.03.2013 16:32
quelle

Tags und Links