Hallo Roman,
Och Antje, warum zwingst Du mich denn dazu...?!
weil ich das erste mal damit überhaupt experimentiert habe und ich wußte, du kontrollierst schon :-)
Also erstmal noch der obligatorische Hinweis: Man kann einen Quelltext auch lesbar aufschreiben, siehe weiter unten fuer Beispiele. ;-)
werde ich das je lernen?
Die Zeile new fuhrpark("auto"+i); ist erstens falsch (denn die Funktion Fuhrpark hast Du mit grossem F geschrieben)
leider, ich hatte mehrfach am Posting etwas geändert und da hatte sich der Fehler eingeschlichen
und zweitens sinnlos, da das eben erzeugte Objekt einfach weggeschmissen wird, weil Du den Rueckgabewert von new (naemlich das Objekt) an keine Variable zuweist.
jetzt wird es recht interessant, schreibt man fuhrpark als Funktionsnamen klein, dann benötigt man keine Variablen die den Rückgabewert aufnehmen. Das hatte ich natürlich getestet. Durch meinen Fehler in der Groß- und Kleinschreibung kam es dann zur Fehlermeldung. Man sollte eben wohl doch kopieren :-)
Das ist aber immer noch ziemlich unsinnig, da Du in der Schleife viermal einen Fuhrpark anlegst, und dabei jeweils den vorher erzeugten ueberschreibst.
stimmt, allerdings wird tatsächlich nichts überschrieben
und es existiert tatsächlich auto1 bis auto4.
ich tippe darauf, es wird ein Feld über dieses Objekt angelegt.
Im Grunde wird das gleiche wie bei den Array ablaufen.
Neue Array gibt man ja auch mit new Array() an, und erst durch die Variablenzuweisung Feld=new Array() erhält man bequemen Zugriff darauf. new Array löscht ja auch nicht alle array.
Übrigens ergibt alert(Array) ein interessantes Ergebnis.
Wie Dir sicher auffaellt, ist der Parameter 'num' fuer Fuhrpark ueberfluessig.
Das war auch der Fehlergrund, gerade das Überflüssigsein dieses Parameters :-)
Korrigieren wir noch eine überflüssige Variable :-)
Nun nochmal Deine obigen Funktionen zusammen, damit Frank sie alle auf einen Blick hat:
function Fuhrpark() { // constructor fuer einen Fuhrpark
}function auto(marke, kilometer, verbrauch, fahrer) { // constructor fuer ein auto
this.marke = marke;
this.kilometer = kilometer;
this.verbrauch = verbrauch;
this.fahrer = fahrer;
}/* var fuhrpark; die braucht man nicht, da man ja ein neues Objekt erzeugt */
function newAuto() {
fuhrpark = new Fuhrpark(); // Anlegen von fuhrpark (Typ ist: Objekt Fuhrpark)
for (i=0; i<4; i++) {
fuhrpark["auto"+i] = new auto("Audi", 3000, 7, "Schulze");
}
alert(fuhrpark.auto2.marke)
}
Ich korrigiere jetzt mal wieder einiges zurück :-)
Du hast die Frage nämlich nicht beantwortet. Sie beantwortet auch gleichzeitig warum, meine Konstruktion klappte vorausgesetzt man schreibt den Funktionsnamen klein.
<html>
<head>
<title>Neue Objekte</title>
</head>
<body onLoad="newAuto()">
<script language="JavaScript"><!--
function auto(marke, kilometer, verbrauch, fahrer) {
this.marke = marke;
this.kilometer = kilometer;
this.verbrauch = verbrauch;
this.fahrer = fahrer;
}
M1=new Array("Audi","Opel","A4","A5");
V1=new Array(2,3,4,5);
function newAuto() {
new auto();
for (i=0;i<4;i++) {
auto[i] = new auto(M1[i], 3000, V1[i], "Schulze");
}
alert(auto[1].marke)
}
//--></script>
<p>Warum verzichte ich auf den Fuhrpark?</p>
<p><a href="javascript:alert(auto[3].verbrauch);">Verbrauch3</a>
<a href="javascript:alert(auto[2].verbrauch);">Verbrauch2</a>
<a href="javascript:alert(auto[1].verbrauch);">Verbrauch1</a>
<a href="javascript:alert(auto[0].verbrauch);">Verbrauch</a> </p>
</body>
</html>
Sorry Antje, aber heute hast Du Dich nicht so sehr mit Ruhm bekleckert.
Aber eine ganze Menge gelernt und das ist mir wichtiger :-)
So und nun beantworte meine Frage auf der Beispielseite :-).
Viele Grüße
Antje
PS: irgendwann mußten wir ja auf die Objekte zurückkommen.