julianp: Objekte gleicher Klasse ausgeben

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.

  1. 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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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);

  2. 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";

  3. 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

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. 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

      --
      Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
      1. 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

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
      2. 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.

    2. 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

      1. 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.

      2. 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

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
  4. Danke Allen.
    Ich bin jetz mal weg. Werde mich morgen weiter mi dem Problem befassen.

    Danke Allen nochmal!

    LG Julian