Ich möchte eine Reihe von Funktionen innerhalb einer Klasseneigenschaft verschachteln, wie unten gezeigt.
Leider erhalten sie keinen Zugriff auf den Hauptbereich der Klasse.
Kann ich das lösen, ohne jede verschachtelte Funktion mit einem Verweis auf this
?
Nicht funktionierende Alternative mit vorgeschlagenem Fettpfeil:
%Vor% Optionale Alternative, die nicht in die globale Eigenschaft this.errors
schreibt:
In JavaScript (als Ergebnis auch CoffeeScript) verwenden Methoden this
des Objekts, das die Methode enthält.
Dies funktioniert normalerweise gut, es sei denn, Sie behandeln ein Beispiel wie das Ihre:
%Vor% Wenn ich mit JavaScript arbeite, würde ich keinen Namespace für Funktionen haben - es funktioniert nicht gut, auch nicht mit Workarounds. Beispielsweise könnten Sie versuchen, den Verweis auf this
-Objekt in object.functions
zu setzen, damit jede Funktion in object.functions
darauf zugreifen kann.
Dies scheint zuerst zu funktionieren, könnte aber verwirrend sein, wenn Sie Eigenschaften wie apply
oder call
verwenden, obj1.functions.alsoDoSomething.call(obj2)
funktioniert nicht, da obj2
nicht korrekt ist (Benutzer sollte das tun obj2.functions
statt dessen, was verwirrend sein kann).
Die wirkliche Lösung ist: nicht . JavaScript ist nicht für einen solchen Missbrauch gedacht. Alle Objektmethoden sollten direkt im Objektprototyp sein. Wenn Sie ein Objekt darin haben, sind alle Methoden davon keine Methoden Ihres Objekts.
Als Ergänzung zur Antwort von GlitchMr erkläre ich, warum jeder Ihrer Versuche gescheitert ist.
functions
wird für den Prototyp deklariert, daher wird @errors
nach myClass.errors
kompiliert. Das Objekt errors
wird jedoch als Instanzelement und nicht als Prototypelement deklariert. functions
mit der Funktionsschreibweise von CoffeeScript, wenn es ein Objekt sein soll. Die Fehlermeldung ist ein CoffeeScript-Compilerfehler; nach der Korrektur dieses Syntaxfehlers funktioniert es wie es sollte! Hier ist ein Beispiel für die korrekte Verwendung des dicken Pfeils für diesen Umstand.
%Vor%Hoffentlich hat das dazu beigetragen, die Fehler zu entmystifizieren und die Kraft von CoffeeScript's fettem Pfeil zu zeigen!
Tags und Links javascript scope coffeescript