RelaXx: objecte mehrfach erstellen

mein problem ist das ich das object "unit" nicht nicht mehrmals erstellen kann.
bei "base_object2" von dem "unit" erbt geht das noch.
ich vermute den fehler im constructor von "unit" komm aber nicht drauf...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">  
  <meta name="generator" content="PSPad editor, www.pspad.com">  
  <title></title>  
  </head>  
  
  
  <body>  
<div id="map">  
  
</div>  
  </body>  
 [code lang=javascript] <script type="text/javascript">  
  
var mapbox ='map';  
  
function base_object2()  
{  
  
this.div = document.createElement("div");  
this.div.id = 0;  
this.div.style.top = 0+ "px";  
this.div.style.left = 0+ "px";  
this.div.innerHTML=0;  
this.init_div=init_div;  
//this.type=type;  
this.update=0;  
this.status=0;  
this.action=0;  
}  
function init_div()  
{  
document.getElementById(mapbox).appendChild(this.div);  
}  
function move_to(x,y)  
{  
this.div.style.top=x+ "px";  
this.div.style.left=y+ "px";  
}  
function move_relative (x,y)  
{  
this.div.style.top=x+ "px";  
this.div.style.left=y+ "px";  
}  
  
function unit(id,x,y,html,update,status,action)  
{  
//this.constructor =  base_object2();  
this.div.id = id;  
this.div.style.top = x+ "px";  
this.div.style.left = y+ "px";  
this.div.innerHTML=html;  
this.move_to=move_to;  
}  
unit.prototype = new base_object2;  
  
//    zwei base_object2 instanzierungen funktionieren  
test1= new base_object2;  
test1.init_div();  
test2= new base_object2;  
test2.div.style.top = 20+ "px";  
test2.init_div();  
  
//        aber 2 unit instanzierungen nicht  
heinz = new unit('iiiiiiiiiiiii',190,550,'house','eaga','50;6',null) ;  
heinz.init_div();  
heinz.move_to(300,300);  
heinz1 = new unit('uuuuuuuuuu',20,20,'house','eaga','50;6',null) ;  
heinz1.init_div();  
  
  </script>

</html>[/code]
schon mal danke für eure hilfe im vorraus!

mfg
RelaXx

  1. Hallo,

    mein problem ist das ich das object "unit" nicht nicht mehrmals erstellen kann.
    bei "base_object2" von dem "unit" erbt geht das noch.
    ich vermute den fehler im constructor von "unit" komm aber nicht drauf...

    [code lang=javascript]

    function base_object2()
    {
    this.div = document.createElement("div");

    ...

    this.init_div=init_div;
    }

    function init_div()
    {
    document.getElementById(mapbox).appendChild(this.div);
    }

    function unit(id,x,y,html,update,status,action)
    {
    this.div.id = id;

    ...

    }
    unit.prototype = new base_object2;

    Der Prototyp von unit ist _ein_ neues base_object2. Es wird also mit new unit(...) jeweils auf das selbe DIV zugegriffen, nämlich auf das, was bei der Bereitstellung des Prototyps von unit mit new base_object2 erzeugt wurde. Selbst das appendChild in init_div ändert nichts daran, weil lt. Definition bei existierenden Nodes eben nicht angehängt, sondern verschoben wird. Siehe https://developer.mozilla.org/en/appendchild.

    Du müsstest also im Konstruktor von unit den Konstruktor von base_object2 einbinden. Siehe https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function/call#Using_call_to_chain_constructors_for_an_object.

    Allerdings würde ich JavaScript nicht zu dieser Art der OOP vergewaltigen. Du versuchst hier mit Macht Klassen und Klassenvererbung nachzubauen. Nutze lieber konsequent das prototyping, indem Du Dein base_object bei Bedarf per base_object.prototype mit neuen Eigenschaften oder Methoden erweiterst, statt per neuer function eine neue "Klasse" erzeugen zu wollen.

    viele Grüße

    Axel

  2. @@RelaXx:

    nuqneH

    [code lang=html]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    BTW, Quirkmodus ist so gewollt?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)