ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
337
337
EMPFEHLEN
-
Hi,
ich habe folgende Klasse in JavaScript:
Code javascript:1 2 3 4 5 6
var test = function() { this.testObjInner = new Array(); this.testStrInner = ''; }; test.prototype.testObj = new Array(); test.prototype.testStr = '';
Diese Klasse rufe ich zwei mal auf und fülle das erste Objekt mit Inhalt:
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12
var test1 = new test; test1.testObjInner.push('foo'); test1.testObj.push('foo'); test1.testStrInner = 'foo'; test1.testStr = 'foo'; console.log(test1.testObjInner, test1.testObj, test1.testStrInner, test1.testStr); var test2 = new test; console.log(test2.testObjInner, test2.testObj, test2.testStrInner, test2.testStr);
Die Ausgabe von test1 ist wie erwartet:
Code :1
[ 'foo' ] [ 'foo' ] 'foo' 'foo'
Jedoch ändert sich bei test2 testObj nicht, wobei es mit testStr oder testObjInner funktioniert:
Code :1
[] [ 'foo' ] '' ''
Wieso verhält sich testObj anders als testStr und testObjInner?
Vielen Dank im Voraus!
Grüße
MaxGeändert von rambo (06.01.12 um 19:43 Uhr)
-
Was hat das mit Node.js zu tun?
Ich habe dazu mal ein vereinfachtes Beispiel erstellt: http://jsfiddle.net/H8TWW/
Das liegt an folgendem:
Wenn du testObj.push aufrufst, fügst du ein Element zu dem Array hinzu, welches sich alle Instanzen teilen.
Wenn du allerdings testStr einen Wert zuweist, dann lässt das die Eigenschaft von dem Prototyp unverändert und du hast stattdessen eine eigene Eigenschaft für genau dieses eine Objekt, die die Eigenschaft vom Prototyp überdeckt/verschwinden lässt. Guck dir die Ausgabe von dem Fiddle an, dann sollte bei der Ausgabe von hasOwnProperty alles klar werden.
-
Danke für die Antwort.
Gibt es eine Lösung für dieses Problem, außer das Array (wie oben, testObjInner) im Constructor zu deklarieren?
-
Das Array im Konstruktor zu deklarieren ist der übliche Weg. Wenn dir das nicht gefällt, musst du dir eventuell eines der vielen Frameworks zum "Verschönern" von Klassen in JavaScript angucken.
Beispiel: https://github.com/ded/klass
-
Okay, vielen Dank.
Ähnliche Themen
-
Benutzerdaten an einem XPresso-Node
Von nux95 im Forum Cinema 4DAntworten: 25Letzter Beitrag: 03.08.10, 12:26 -
Von einem String zu einem Objekt konvertieren
Von Jens K im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 30.06.08, 12:18 -
Problem mit Fade von einem Objekt
Von NoGFX im Forum Flash PlattformAntworten: 1Letzter Beitrag: 17.03.05, 19:55 -
sortierung von arrays in einem array nach einem Wert
Von ohio im Forum PHPAntworten: 2Letzter Beitrag: 09.09.03, 10:41 -
Propertie von einem Objekt zu einem bestimmten Zeitpunkt ändern
Von A-Lien im Forum Flash PlattformAntworten: 1Letzter Beitrag: 02.11.01, 19:02





Zitieren

Login





