Das ist ganz einfach:
for(var propertyName in myObject) {
// propertyName is what you want
// you can get the value like this: myObject[propertyName]
}
Auf diese Weise erhalten Sie keine privaten Variablen, da diese nicht verfügbar sind.
EDIT: @bitwiseplatypus ist richtig, dass, wenn Sie nicht die hasOwnProperty()
Methode erhalten Sie Eigenschaften, die vererbt werden - ich wüsste allerdings nicht, warum jemand, der mit objektorientierter Programmierung vertraut ist, etwas anderes erwarten sollte! Typischerweise hat jemand, der dies anspricht, Douglas Crockfords Warnungen zu hören bekommen, die mich immer noch ein wenig verwirren. Nochmals: Vererbung ist ein normaler Bestandteil von OO-Sprachen und daher auch ein Bestandteil von JavaScript, auch wenn es prototypisch ist.
Nun, das ist gesagt, hasOwnProperty()
es nützlich für die Filterung, aber wir müssen keine Warnung aussprechen, als ob es etwas Gefährliches wäre, geerbte Eigenschaften zu erhalten.
EDIT 2: @bitwiseplatypus spricht die Situation an, die entstehen würde, wenn jemand Ihren Objekten zu einem späteren Zeitpunkt Eigenschaften/Methoden hinzufügt, als Sie Ihre Objekte ursprünglich geschrieben haben (über ihren Prototyp) - es stimmt zwar, dass dies zu unerwartetem Verhalten führen könnte, aber ich persönlich sehe das nicht als mein Problem an. Das ist nur eine Frage der Meinung. Außerdem, was ist, wenn ich Dinge so entwerfe, dass ich Prototypen während der Konstruktion meiner Objekte verwende und dennoch Code habe, der über die Eigenschaften des Objekts iteriert, und ich möchte alle geerbten Eigenschaften haben? Ich würde nicht hasOwnProperty()
. Und dann, sagen wir mal, fügt jemand später neue Eigenschaften hinzu. Ist es meine Schuld, wenn sich die Dinge zu diesem Zeitpunkt schlecht verhalten? Nein, das glaube ich nicht. Ich denke, dass dies der Grund dafür ist, dass jQuery, als Beispiel, bestimmte Möglichkeiten zur Erweiterung seiner Funktionsweise hat (über jQuery.extend
y jQuery.fn.extend
).