Hi
Der Sinn deines Codes erschließt sich mir nicht ganz. Wenn ich richtig verstehe, geht es doch nur darum, die Eigenschaften/Methoden eines Objekts zu durchlaufen, ohne dabei die geerbten zu besuchen (vom Prototyp z.B.).
...
forOwn(myObj, function (p,v) {alert(p + ": " + v);} ); // gibt nur a,b und c aus :-)[/code]
Naja es wär schon schöner den gleichen Kontrollfluss wie bei einer direkten for-Schleife zu haben, statt eine anonyme Funktion übergebne zu müssen.
While () {} wär schon schick!
Wie er schon gesagt hat break und continue kannst du dann auch nicht mehr benutzen (naja Continue wär vielleicht ein vorzeitiges Return in der Function und Break könnte man zusätzlich über den Rückgabecode des Returns abbilden)
Aber du siehst ich muss hier für jedes gewünschte Verhalten einen Workaround bauen... wenn's aber mit while funktionieren täte, hätte man einen direkten Zugang.
PS: man sollte Anfängern gar nix von Object.prototype erzählen! Je weniger davon wissen umso ...
Das stimmt, nützt aber nicht unbedingt etwas. Gerade Anfänger binden so gut wie jedes Script ein, dessen sie habhaft werden können. Wenn nur eines davon mit Object.prototype rummacht, haben sie evtl. ein Problem, das sie nicht lösen können ohne ein Wissen darum.
Naja, wer unverstandenen Code einbindet, also sorry! Anfänger sollten begreifen das Object.prototype für "den Anfang" Tabu ist. (Dieser Thread zeigt deutlich das selbst "Profis" hier heftig schlingern) Mit Object.prototype verändere ich alle Objekte auch das Core, ich schaffe mir quasi einen neuen JS-Dialekt.
Und gute Bibliotheken wie portotype.js sind wenigstens konsequent genug Ersatzweise Hash() anzubieten. (allerdings auch nicht ohne Probleme)
Andersrum, wenn ich z.B. in Perl kritiklos iregdnwelche Module einbinde, brauch ich mich auch nicht zu wundern wenn meine Hashes nicht mehr funktionieren, wg einer tie-Bindung oder weil die Operatoren überladen wurden.
Deswegen behaupte ich aber auch nicht Perl kennt keine Hashes!
Grüße
Kurt