Beispiel JSFiddle, damit Sie eine bessere Vorstellung davon bekommen, was Ссылка passiert (öffnen Sie Ihre Konsole und sehen Sie sich die geloggte vars
object).
Ich baue einen Parser und Computer für eine bestimmte Teilmenge von Mathematik in JavaScript, nimmt einen Ausdruck als String vom Benutzer und erlaubt ihnen Variablen zu verwenden. Um meine Berechnungslogik einfach zu halten, aber die Verwendung von Variablen zuzulassen, habe ich ein Objekt erstellt, das sich wie eine Zahl verhält, aber den Vorteil hat, dass es als Referenz übergeben wird.
%Vor%Das funktioniert so:
%Vor% Sobald ich jedoch irgendeine Form der Zuweisungsoperation wie +=
ausführen möchte, ist das Objekt verloren und wird durch das Ergebnis der Operation gegen die Werteigenschaft des Objekts ersetzt. z.B.
Der Grund, warum ich es so brauche, ist, weil ich die gleiche Funktion verwenden möchte, um sowohl Zahlen als auch Variablen zu verarbeiten. Ich könnte Code zu jeder Zuweisungsoperation hinzufügen, aber dies fühlt sich für mich suboptimal an, z.B.
%Vor%Aber ich würde viel lieber schreiben:
%Vor%Kann das gemacht werden?
Ich würde viel lieber schreiben:
%Vor%Kann das gemacht werden?
Nein. Es ist unmöglich, einen Referenzwert als einzelne Variable zu übergeben. Sie müssen immer Objekteigenschaften verwenden. a
hat in Ihrer Funktion immer einen lokalen Gültigkeitsbereich, daher wird sich die Änderung nicht auf die äußere Welt auswirken. Und ich würde Sie davon abhalten zu versuchen, Ihre Operatoren zu Funktionen zu machen, die auf Variablen mit höherem Umfang operieren ...
Ich denke, in Ihrem Fall ist es ziemlich gut, einen expliziten Test für Variablen zu verwenden, weil der Zuweisungsoperator das tatsächlich tun muss. Sie können Literalen oder anderen Werten nur Variablen zuweisen. Es könnte sogar
sein %Vor%Um Code-Duplizierung zu vermeiden, schreiben Sie möglicherweise nicht alle zusammengesetzten Zuweisungsoperatoren aus. Definieren Sie sie generisch:
%Vor%Tags und Links javascript