alle Instanzen eines Objektes / OOP
Tillmann
- javascript
0 Andreas Lindig0 Tillmann0 Tobias Müller0 molily
0 Tobias Müller
Hallo in die Runde!
Ich möchte gerne alle Instanzen eines bestimmten Objektes in einer Schleife auswählen. Wie mache ich das?
Ich hoffe die "Benennung" war korrekt, zur Erklärung ein Beipiel:
//Ich habe den Konstruktor:
function Haus() {
this.Nummer = Nummer ;
this.Strasse = Strasse ;
this.Groesse = Groesse;
}
//Und definiere mir ein p(P)aar Instanzen:
var meinHaus = new Haus();
meinHaus.Nummer = 12;
meinHaus.Strasse = "Hauptstr.;
meinHaus.Groesse = 200;
var deinHaus = new Haus();
deinHaus.Nummer = 10;
deinHaus.Strasse = "Nebentstr.;
deinHaus.Groesse = 150;
//Nun möchte ich eine Schleife formulieren nach dem Motto:
//wähle alle Häuser aus, die zuvor definiert wurden
for (var AlleHaueser in Haus) {
document.write("Haus" + ...);
}
Nur, so funktioniert das leider nicht ... Gibt es also einen anderen Weg?
Vielen Dank für Rat & Tat!
Hallo,
//Ich habe den Konstruktor:
function Haus() {
this.Nummer = Nummer ;
this.Strasse = Strasse ;
this.Groesse = Groesse;
}
das ist Banane, aber für Deine Frage egal...
//Nun möchte ich eine Schleife formulieren nach dem Motto:
//wähle alle Häuser aus, die zuvor definiert wurden
Da ich an eval() immer mal wieder scheitere und es eh evil sein soll, empfehle ich das gar nicht erst. Das Einfachste ist, wenn Du die Objekt alle in ein Array packst.
var Haeuser = new Array();
Haeuser["meins"] = new Haus();
Haeuser["deins"] = new Haus();
...
for(var besitzer in Haeuser)
alert(Haeuser[besitzer])
Gruß, Andreas
Das Einfachste ist, wenn Du die Objekt alle in ein Array packst.
Bing!
Das Licht ist an.
Vielen Dank!
das ist Banane, aber für Deine Frage egal...
Stimmt, das war Banane. Hatte meinen Code geändert/vereinfacht, aber wohl nicht vollständig ...
Hallo Andreas,
Da warst du wohl schneller als ich... ;-)
MfG, Mülli
Hallo,
var Haeuser = new Array();
Haeuser["meins"] = new Haus();
Haeuser["deins"] = new Haus();
Da es in JavaScript keine assoziativen Arrays gibt, ist das ein gewöhnliches Object, daher reicht es, new Object() zu schreiben. Mit Array() funktioniert es auch (jeder Array ist ein Object), aber man kann weder Eigenschaften noch Methoden des vermeintlichen Arrays benutzen.
Mathias
Da es in JavaScript keine assoziativen Arrays gibt, ist das ein gewöhnliches Object, daher reicht es, new Object() zu schreiben.
jetzt verstehe ich, warum das bei alert immer als 'object' ausgegeben wird.
man kann weder Eigenschaften noch Methoden des vermeintlichen Arrays benutzen.
ist mir bekannt. Aber man kann ja auch gemischte Arrays (indiziert und assoziativ) erstellen.
Gruß, Andreas
Hallo Tillmann,
//Ich habe den Konstruktor:
function Haus() {
this.Nummer = Nummer ;
this.Strasse = Strasse ;
this.Groesse = Groesse;
}
---------------------^^^^^^^^
Da hakts ja schonmal. Woher soll denn die Funktion die Werte für Nummer, Strasse etc. nehmen?
//Und definiere mir ein p(P)aar Instanzen:
var meinHaus = new Haus();
meinHaus.Nummer = 12;
meinHaus.Strasse = "Hauptstr.;
meinHaus.Groesse = 200;var deinHaus = new Haus();
deinHaus.Nummer = 10;
deinHaus.Strasse = "Nebentstr.;
deinHaus.Groesse = 150;
Das führt also auch zu nichts...
//Nun möchte ich eine Schleife formulieren nach dem Motto:
//wähle alle Häuser aus, die zuvor definiert wurden
for (var AlleHaueser in Haus) {
document.write("Haus" + ...);
}
Und das selbstverständlich dann auch.
In diesem Beispiel würde auf die Konstruktor-Funktion "Haus" verzichten und mit new Object() ein entsprechndes Objekt erstellen. Damit du mehrere Haus-Objekte bequem durchlaufen kannst würde ich diese wiederum in einem Array speichern.
Also beispielsweise so:
var haeuser = new Array();
haeuser['meinHaus'] = new Object();
haeuser['meinHaus'].Nummer = 12;
haeuser['meinHaus'].Strasse = "Hauptstr.";
haeuser['meinHaus'].Groesse = 200;
haeuser['deinHaus'] = new Object();
haeuser['deinHaus'].Nummer = 10;
haeuser['deinHaus'].Strasse = "Nebentstr.";
haeuser['deinHaus'].Groesse = 150;
for (var i in haeuser) {
document.write(
i + ': ' +
' Nummer: ' + haeuser[i].Nummer +
' Strasse: ' + haeuser[i].Strasse +
' Groesse: ' + haeuser[i].Groesse + '<br/>'
);
}
Ist nur _eine_ Idee, wie man es lösen könnte. Es ginge natürlich auch anders oder besser, aber vielleicht hilft es dir ja weiter.
MfG, Mülli