Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!gegeweb.42!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder2-2.proxad.net!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <4691760.CfJmLsVOf1@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Thu, 10 Nov 2011 13:43:35 +0100 User-Agent: KNode/4.4.11 Content-Transfer-Encoding: 8Bit Subject: Re: Object-Eigenschaften auslesen Newsgroups: comp.lang.javascript,de.comp.lang.javascript References: <9i0bc3FbnmU1@mid.individual.net> Followup-To: de.comp.lang.javascript MIME-Version: 1.0 Lines: 100 NNTP-Posting-Date: 10 Nov 2011 13:43:36 CET NNTP-Posting-Host: 18208995.newsspool1.arcor-online.net X-Trace: DXC=aWSPHkQ>]Y2Tia]Ho99G50ic==]BZ:af>4Fo<]lROoR1<`=YMgDjhg21W8`eFm\jm0DZm8W4\YJN wenn ich ein Objekt über JSON geladen habe und die Eigenschaften nicht > kenne. Wie kann ich die Namen der Eigenschaften des Objektes durchlaufen? > > Selfhtml schreibt zur Definition von Objekten als Beispiel: SELFHTML eignet sich nicht als (JavaScript/ECMAScript-)Referenz. Nicht nur, weil es hoffnungslos veraltet ist. Sorry. > function Farbe (R, G, B) { > this.R = R; > this.G = G; > this.B = B; > this.hex = "#"; > } > > var Hintergrund = new Farbe("E0", "FF", "E0"); Sauberer Codestil sieht (ansatzweise) so aus: function Farbe(r, g, b) { this.r = r; this.g = g; this.b = b; this.hex = "#"; } var hintergrund = new Farbe("E0", "FF", "E0"); Nur Konstruktoren, Factorys und Konstanten (bzw. als Konstante verwendete Eigenschaften) sollten Bezeichner mit grossem Anfangsbuchstaben haben. Weiterhin würde man hier sinnvollerweise durchgängig Englisch verwenden und den Eigenschaften sprechende Namen geben. Ausserdem würde man die Komponenten als Zahlen speichern, und nur für die Ausgabe bzw. Verwendung in HTML/CSS in eine Zeichenfolge konvertieren (flexibler). Zum Beispiel so: String.prototype.padLeft = function(width, padChar) { var s = String(this); var len = s.length; if (width > len) { var a = []; a.length = width - len + 1; return a.join(padChar) + s; } return s; }; String.prototype.leadingZero = function(width) { return String(this).padLeft(width, "0"); }; function Color(red, green, blue) { this.red = red; this.green = green; this.blue = blue; } Color.prototype.toHex = function() { return "#" + this.red.toString(16).leadingZero(2) + this.green.toString(16).leadingZero(2) + this.blue.toString(16).leadingZero(2); }; var bgColor = new Color(0xE0, 0xFF, 0xE0); (Negative Zahlen werden hier noch nicht berücksichtigt, ist aber in diesem Beispiel auch nicht notwendig. Vgl. ) > Wie kann ich die Eigenschaften-Namen "R", "G", "B" und "hex" des > Objektes Hintergrund ermitteln. Es gibt kein Objekt "Hintergrund". Objekte haben eine Identität, (i. d. R.) keinen Namen. `hintergrund' (bzw. in Deinem Code `Hintergrund') ist lediglich der Bezeichner einer Variablen. Diese Variable speichert (aktuell) eine Referenz auf das mit `new Farbe(…)' erzeugte Objekt. Ein Objekt kann von mehreren Variablen/Eigenschaften referenziert werden. Auf die Objekteigenschaften kannst Du dann mittels Punkt-Zugriffssyntax – hintergrund.red – oder (falls das nicht geht, siehe andere Antwort) mittels Klammer- Zugriffssyntax – hintergrund["red"] – zugreifen (Gross-/Kleinschreibung beachten). X-Post & F'up2 de.comp.lang.javascript. comp.lang.javascript ist die internationale Newsgroup, hier kommst Du deshalb mit Englisch am weitesten. -- When all you know is jQuery, every problem looks $olvable.