JavaScript hat nicht __setitem__ und dieses Beispiel funktioniert offensichtlich nicht.
In python funktioniert __setitem__ wie folgt:
%Vor%Ist es möglich, __setitem__-Verhalten in JavaScript zu implementieren? Alle kniffligen Problemumgehungen wären hilfreich.
Nein, aber es gibt Pläne, eine ähnliche Funktion in JavaScript 2 zu unterstützen. Die folgende Objektliteralsyntax wurde auf Mozilla Bug 312116 und es sieht so aus, als ob es für Objektliterale gemacht wird:
%Vor% Ich nehme an, dass Set auch unterstützt wird (als set * (property, value) {...}
).
Ist es möglich, __setitem__-Verhalten in JavaScript zu implementieren?
Nein. Es gibt kein Getter / Setter für beliebige Eigenschaften in JavaScript.
In Firefox können Sie die Getter und Setter von JavaScript 1.5 + verwenden, um x
und y
Eigenschaften zu definieren, die ihre Werte bei der Zuweisung quadrieren, zB:
Sie müssten jedoch für jede benannte Eigenschaft, die Sie im Voraus verwenden möchten, einen Setter angeben. Und es wird nicht Cross-Browser funktionieren.
In den häufig verwendeten JavaScript-Versionen gibt es keine echten Setter und Getter. Wenn Sie also den Effekt emulieren möchten, müssen Sie eine andere Syntax verwenden. Für eine Eigenschaft obj.x
, die Verwendung von obj.x()
, um auf den Wert der Eigenschaft zuzugreifen, und obj.x(123)
, um den Wert festzulegen, scheint eine ziemlich bequeme Syntax zu sein.
Es kann wie folgt implementiert werden:
%Vor% Nun unterstützen von make_property
generierte Eigenschaften die gewünschte Syntax und die ihnen zugewiesenen Quadratwerte:
Ich glaube nicht, dass Sie den Operator [] in der aktuellen Version von Javascript überschreiben können. Im aktuellen Javascript sind Objekte im Wesentlichen nur assoziative Arrays, daher fügt der [] -Operator einfach ein Schlüssel / Wert-Paar zum Array hinzu, das das Objekt ist.
Sie könnten Methoden schreiben, die bestimmte Werte festlegen oder sogar eine Zahl quadrieren, und den Wert als Schlüssel / Wert-Paar hinzufügen, jedoch nicht durch Überladen des Operators [].
Javascript2 hat einige Spezifikationen für das Überladen von Operatoren, aber diese Spezifikation ist MIA.
Tags und Links python javascript syntactic-sugar