peterS.: korrekt referenzieren

Beitrag lesen

gruss Christoph,

Als kleine Übung wollte ich nun folgendes machen:
man kann "Menschen erzeugen"(die noch schwarzen
Kästen) und in alle Himmelsrichtungen verschieben.
So weit so gut. Das funktioniert ... nur teilweise:

Der erste Mensch ist standartmäßig vorhanden(Mensch Nummer 0).
Das Programm erhöht eine Index - ...
...
... die dafür zuständige Variable nennt sich mensch_anzahl
und wird am ende so behandelt: mensch_anzahl++;

dies geschieht bei Dir nur in der methode [createMensch] die dem
  objekt [tv] gehoert und eben genau einmal auf [window.onload]
  aufgerufen wird.

Und jetzt die Frage: Warum kann diese Variable maximal den Wert 1 bekommen?

das ist auch schon die halbe antwort auf obige frage.

alle anderen [[Mensch]]-instanzen ezeugst Du ueber den direkten
aufruf des [[Mensch]]-konstruktors aus der globalen funktion
[FuegeNeuenMenschenHinzu] heraus. dort wird aber der genau einmal
in [tv.createMensch ] um 1 erhoehte index [tv.mensch_anzahl] immer
wieder nur mit diesem wert 1 ueberschrieben und eben nicht erhoeht.

denn die zuweisung:

var anzahl = tv.mensch_anzahl;

initialisiert das lokale [anzahl] mir der aktuellen 1.

die zuweisung:

tv.mensch_anzahl = anzahl++;

erhoeht jetzt aber keineswegs [tv.mensch_anzahl] um 1, sondern
setzt [tv.mensch_anzahl] zuerst auf den aktuellen wert des lokalen
[anzahl], der immer noch 1 ist, und erhoeht erst nach dieser
zuweisung [anzahl] auf 2.

und genau das passiert in Deinem code bei jedem aufruf von
[FuegeNeuenMenschenHinzu].

so long - peterS. - pseliger@gmx.net

--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]