objecte mehrfach erstellen
RelaXx
- javascript
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
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
@@RelaXx:
nuqneH
[code lang=html]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
BTW, Quirkmodus ist so gewollt?
Qapla'