[Node.js] Problem mit einem Array in einem Objekt

rambo

Mitglied
Problem mit einem Array in einem Objekt

Hi,

ich habe folgende Klasse in JavaScript:

Javascript:
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:
Javascript:
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:
[ 'foo' ] [ 'foo' ] 'foo' 'foo'

Jedoch ändert sich bei test2 testObj nicht, wobei es mit testStr oder testObjInner funktioniert:
Code:
[] [ 'foo' ] '' ''

Wieso verhält sich testObj anders als testStr und testObjInner?

Vielen Dank im Voraus!

Grüße
Max
 
Zuletzt bearbeitet von einem Moderator:
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
 

Neue Beiträge

Zurück