Objekte gleicher Klasse ausgeben
julianp
- javascript
Guten Tag!
Es handelt sich um ein kleines Denkproblem in Javascript.
Zur besseren Veranschaulichung hier der Code:
###############
//Klasse "Contact" mit 3 Eigenschaften
function Contact() {
this.vorname = "";
this.nachname = "";
this.nickname = "";
}
//3 Objekte der Klasse "Contact" werden erzeugt.
var peter = new Contact();
peter.vorname = "Peter";
peter.nachname = "Maier";
peter.nickname = "pemei";
var gerhild = new Contact();
gerhild.vorname = "Gerhild";
gerhild.nachname = "Kuhbauer";
gerhild.nickname = "Hildy";
var maria = new Client();
maria.vorname = "Maria";
maria.nachname = "Steinmetz";
maria.nickname = "Mary_S";
###############
Ich möchte alle Eigenschaften aller erzeugten Objekte ausgeben lassen. (nicht einzeln sondern wenn ich noch hundert Objekte hinzufüge die auch alle).
Habe leider keine Idee wie ich das machen könnte.
Grüße Julian
PS: Wenn es ganz andere Lösungen gibt: Nur heraus damit! ;)
Ich will im Endeffekt für jeden Contact ein DIV erzeugen das die Informationen anzeigt.
hi,
Ich möchte alle Eigenschaften aller erzeugten Objekte ausgeben lassen. (nicht einzeln sondern wenn ich noch hundert Objekte hinzufüge die auch alle). [...]
Ich will im Endeffekt für jeden Contact ein DIV erzeugen das die Informationen anzeigt.
Warum packst du dann deine Objekte nicht in ein Array - welches du dann ganz bequem zu jedem beliebigen Zeitpunkt mit einer Schleife durchlaufen kannst.
gruß,
wahsaga
Warum packst du dann deine Objekte nicht in ein Array - welches du »»dann ganz bequem zu jedem beliebigen Zeitpunkt mit einer Schleife »»durchlaufen kannst.
Hm wie mach ich das dann?
So?:
all_contacts = new Array(contact.peter, contact.gerhild, contact.maria);
Natürlich ist das 3. Objekt auch der Klasse "Contact" und nicht "Client" wie fälschlich dortsteht.
also:
[...]
var maria = new Contact();
maria.vorname = "Maria";
maria.nachname = "Steinmetz";
maria.nickname = "Mary_S";
Hallo julianp.
//Klasse "Contact" mit 3 Eigenschaften
function Contact() {
this.vorname = "";
this.nachname = "";
this.nickname = "";
}
Warum nicht so?
~~~javascript
function Contact(vorname, nachname, nickname) {
this.vorname = vorname;
this.nachname = nachname;
this.nickname = nickname;
}
Vorteil: Du könntest du Name, Vorname und Nickname direkt beim Erzeugen des Objektes angeben.
Nachteil: Du müsstest du Name, Vorname und Nickname direkt beim Erzeugen des Objektes angeben.
var maria = new Client();
Nicht new Contact()?
Ich möchte alle Eigenschaften aller erzeugten Objekte ausgeben lassen. (nicht einzeln sondern wenn ich noch hundert Objekte hinzufüge die auch alle).
Du könntest hier mit for… in … sowie instanceof arbeiten, um zu prüfen, ob die jeweilige Variable eine Instanz des jeweiligen Objektes ist.
Einen schönen Montag noch.
Gruß, Ashura
Hallo Ashura,
Warum nicht so?
function Contact(vorname, nachname, nickname) {
this.vorname = vorname;
this.nachname = nachname;
this.nickname = nickname;
}
>
> Vorteil: Du könntest du Name, Vorname und Nickname direkt beim Erzeugen des Objektes angeben.
> Nachteil: Du müsstest du Name, Vorname und Nickname direkt beim Erzeugen des Objektes angeben.
Du könntest du die Anzahl du der Pronomen du etwas reduzieren. ;-)
Abgesehen davon lässt sich der Nachteil, den du erwähnst, leicht ausbügeln:
> ~~~javascript
function Contact(vorname, nachname, nickname) {
> this.vorname = (vorname ? vorname : "");
> this.nachname = (nachname ? nachname : "");
> this.nickname = (nickname ? nickname : "");
> }
Dann kannst du im Funktionsaufruf (Konstruktor) auch Argumente weglassen; die fehlenden Argumente werden durch Leerstrings ergänzt.
So long,
Martin
Hallo Martin.
Nachteil: Du müsstest du Name, Vorname und Nickname direkt beim Erzeugen des Objektes angeben.
Du könntest du die Anzahl du der Pronomen du etwas reduzieren. ;-)
Oder mir endlich abgewöhnen, mitten im Satz die Formulierungen zu ändern.
Abgesehen davon lässt sich der Nachteil, den du erwähnst, leicht ausbügeln:
Schicke (Chice?) Idee, gefällt mir.
Einen schönen Montag noch.
Gruß, Ashura
Abgesehen davon lässt sich der Nachteil, den du erwähnst, leicht ausbügeln:
function Contact(vorname, nachname, nickname) {
this.vorname = (vorname ? vorname : "");
this.nachname = (nachname ? nachname : "");
this.nickname = (nickname ? nickname : "");
}
oder noch kürzer:
> ~~~javascript
function Contact(vorname, nachname, nickname) {
this.vorname = vorname || "";
this.nachname = nachname || "";
this.nickname = nickname || "";
}
Struppi.
Nicht new Contact()?
Ja natürlich new Contact(). Tut mir leid war ein Copy&Paste Fehler ;P
Du könntest hier mit for… in … sowie instanceof arbeiten, um zu prüfen, ob die jeweilige Variable eine Instanz des jeweiligen Objektes ist.
Danke einmal für die Hinweise.. doch ich verstehe es nicht wie ich etwas abfragen soll von dem ich den Namen noch nicht kenne.
Sprich: Die Namen der Objekte (peter, gerhild und maria) kenne ich ja noch nicht da sie ja beliebig hinzugefügt und verändert werden sollen.
Einen schönen Montag noch.
Danke dir auch
LG Julian
Danke einmal für die Hinweise.. doch ich verstehe es nicht wie ich etwas abfragen soll von dem ich den Namen noch nicht kenne.
Wie schon erwähnt dürfte dein Ansatz nicht so gelungen sein. Wenn du eine Liste von Variabeln hast erzeugt man i.d.R. ein Array davon, damit lassen sich dann Problemlos alle erzeugten Objekt durchlaufen.
Alles über Array findest du hier http://de.selfhtml.org/javascript/objekte/array.htm
Sprich: Die Namen der Objekte (peter, gerhild und maria) kenne ich ja noch nicht da sie ja beliebig hinzugefügt und verändert werden sollen.
Wenn du es unbedingt so machen willst (was nicht zu empfehlen ist), dann musst du alle Objekte des window Elementes durchlaufen und bei jedem fragen ob es eine instanceOf() 'Contact' ist, was aber sehr langwierig werden könnte.
Struppi.
Hallo julianp.
Sprich: Die Namen der Objekte (peter, gerhild und maria) kenne ich ja noch nicht da sie ja beliebig hinzugefügt und verändert werden sollen.
Aber irgendwo erzeugst du sie ja schließlich, womit du ihren Bezeichner auch wissen solltest.
Ansonsten solltest du dir einmal folgendes ausgeben lassen:
alert(window.peter instanceof Contact);
Erzeugst du die Variable peter in einem Objekt, so musst du natürlich dieses an Stelle von window verwenden.
Ein weiterer Ansatz:
function Contact() {
this.vorname = "";
this.nachname = "";
this.nickname = "";
}
var peter = new Contact();
peter.vorname = "Peter";
peter.nachname = "Maier";
peter.nickname = "pemei";
for(var prop in window) {
if (window[prop] instanceof Contact) {
for (subprop in window[prop]) {
alert(prop + '[' + subprop + ']' + ' = ' + window[prop][subprop]);
}
}
}
Einen schönen Montag noch.
Gruß, Ashura
Danke Allen.
Ich bin jetz mal weg. Werde mich morgen weiter mi dem Problem befassen.
Danke Allen nochmal!
LG Julian