JavaScript entspricht Pythons __setitem__

7
%Vor%

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.

    
NVI 10.11.2009, 23:48
quelle

5 Antworten

7

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) {...} ).

    
Eli Grey 11.11.2009, 00:07
quelle
10
  

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:

%Vor%

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.

    
bobince 11.11.2009 00:03
quelle
5

Sie können dies (da Objekte in Javascript auch assoziative Arrays sind):

%Vor%     
manji 11.11.2009 00:05
quelle
5

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:

%Vor%     
sth 17.11.2009 15:13
quelle
1

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.

    
baleful 11.11.2009 00:04
quelle