minicrispie: Objektorientiertes Programmieren

Hallo,

als ich mir neulich diesen Artikel durchgelesen hab, empfand ich dies als eine Idee, mein aktuelles Projekt unter Verwendung von Objekten zu organisieren.

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-Variable und bei klick auf den Button ("Den 1. Menschen erschaffen") wird ein Weiterer Kasten ins Bild gesetzt. dieser Mensch(Kasten) hat den Index 1.
Der bis hier hin produzierte Quelltext:

<div id="ebene_mensch">  
   <div id="mensch_0" ...></div>  
   <div id="mensch_1" ...></div>  
</div>

Diese Beiden "Menschen" kann ich ohne Probleme und wie gewünscht bewegen.
Wenn ich aber einen 3. Menschen haben will, nimmt dieser den Index 1(also den vom zweiten Menschen) an.
Nun lautet der Quelltext so:

<div id="ebene_mensch">  
   <div id="mensch_0" ...></div>  
   <div id="mensch_1" ...></div>  
   <div id="mensch_1" ...></div>  
</div>

die dafür zuständige Variable nennt sich mensch_anzahl und wird am ende so behandelt:

mensch_anzahl++;

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

Achso: Das ganze könnt ihr hier austesten.

MfG. Christoph Ludwig

--
Wo die Sprache aufhört, fängt die Musik an...
Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
Go to this
  1. 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:]
    1. Hallo,

      hey danke!
      jetzt funktionierts.
      (Das ich da nicht selber drauf gekommen bin -.-)

      MfG. Christoph Ludwig

      --
      Wo die Sprache aufhört, fängt die Musik an...
      Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
      Go to this