Objekte in Array

StormChaser

Mitglied
Hallo, JS-Pros,

mit JS konnte ich mich ja noch nie wirklich anfreunden, und die aktuelle Geschichte ist dabei auch nicht hilfreich.
Ganz interessant, dass Peter Kropff in seinem Tutorial zu Javascript-"Arrays" auch zur Verzweiflung getrieben wird. Das beruhigt mich zwar etwas, hilft mir aber nicht wirklich weiter.

Das Problem:
ich erzeuge ein Objekt, etwa so:
Code:
Objekt = 
( 
 x:0,
 y:0
);

Dann erzeuge ich ein Array, etwa so:
Code:
obs = new Array();

Dann lege ich 2 Objekte in das Array, etwa so:
Code:
obs[0] = Objekt;
obs[1] = Objekt;

Dann ändere ich die Parameter, um die Objekte an unterschiedlichen Positionen zu haben, etwa so:
Code:
obs[0].x=7;
obs[1].x=17;

Genau bis hier hin funktioniert das auch ganz hervorragend - bis ich mir die Objekte auf ein canvas zeichnen lassen will.
Das versuche ich über eine for-Schleife, also etwa so:
Code:
for ( i = 0; i < obs.length; i++ )
{
 <ctx.rect ausgeben>
}

Das Problem ist, dass die Positionen sich "fast" nicht mehr unterscheiden. Es gibt einfach keine 2 unterschiedlichen Objekte.
Nach stundenlangem Suchen und Probieren, vielen neuen Erkenntnissen zu Arrays in Javascript bin ich der Lösung meines Problems noch keinen Schritt näher gekommen. Vielleicht hat ja jemand einen Geistesblitz und kann mir auf die Sprünge helfen.


Danke fürs Lesen.
 
Lösung
Es gibt einfach keine 2 unterschiedlichen Objekte.
Genau das ist der Fall. Wenn Du hiermit:
Code:
obs[0] = Objekt;
obs[1] = Objekt;
das ursprüngliche Objekt in das Array einträgst wird nicht eine Kopie des Objektes eingetragen, sondern eine Referenz davon, so eine Art Hausnummer oder Adresse. Veränderst Du jetzt die x-Position, wirkt das sowohl bei obs[0] als auch bei obs[1] auf das ursprüngliche, d. h. das selbe Objekt.
Lösung indem Du das Objekt im Array neu anlegst und alle Eigenschaften dort hin überträgst:
JavaScript/Objekte/Object/assign – SELFHTML-Wiki
Es gibt auch noch andere Möglichkeiten, die gängigste ist wahrscheinlich die Verwendung einer Konstruktor-Funktion siehe hier...
Es gibt einfach keine 2 unterschiedlichen Objekte.
Genau das ist der Fall. Wenn Du hiermit:
Code:
obs[0] = Objekt;
obs[1] = Objekt;
das ursprüngliche Objekt in das Array einträgst wird nicht eine Kopie des Objektes eingetragen, sondern eine Referenz davon, so eine Art Hausnummer oder Adresse. Veränderst Du jetzt die x-Position, wirkt das sowohl bei obs[0] als auch bei obs[1] auf das ursprüngliche, d. h. das selbe Objekt.
Lösung indem Du das Objekt im Array neu anlegst und alle Eigenschaften dort hin überträgst:
JavaScript/Objekte/Object/assign – SELFHTML-Wiki
Es gibt auch noch andere Möglichkeiten, die gängigste ist wahrscheinlich die Verwendung einer Konstruktor-Funktion siehe hier:
JavaScript/Objekte/Eigenschaften und Methoden – SELFHTML-Wiki
 
Lösung
Danke, @Sempervivum.

Genau das ist der Fall. Wenn Du hiermit:
Code:
obs[0] = Objekt;
obs[1] = Objekt;
das ursprüngliche Objekt in das Array einträgst wird nicht eine Kopie des Objektes eingetragen, sondern eine Referenz davon, so eine Art Hausnummer oder Adresse. Veränderst Du jetzt die x-Position, wirkt das sowohl bei obs[0] als auch bei obs[1] auf das ursprüngliche, d. h. das selbe Objekt.
Lösung indem Du das Objekt im Array neu anlegst und alle Eigenschaften dort hin überträgst:
JavaScript/Objekte/Object/assign – SELFHTML-Wiki
Es gibt auch noch andere Möglichkeiten, die gängigste ist wahrscheinlich die Verwendung einer Konstruktor-Funktion siehe hier:
JavaScript/Objekte/Eigenschaften und Methoden – SELFHTML-Wiki

Ich hatte gedacht, dass Objekte in das Array kopiert werden, das war der entscheidende Fehler. Mit deiner Klarstellung und deinen Hinweisen komme ich dann (hoffentlich) auch bald weiter :)

edit: Juchhuu! (y)
 
Zuletzt bearbeitet:
Zurück