Hallo,
[...] Nein, tut's leider nicht. Habe mich aber auch verguckt.
...
Irgendwo hat er auch recht, wenn er diese komische um die Ecke Vererberei kritisiert, das verwirrt ziemlich. Tja hab ihm schon ne zwote Mail geschickt ...
Tja, ich meine wirklich, du solltest es lieber lassen, den Mann zuzumüllen mit Mails wie "1. mach's doch lieber so und so... 2. äh nein, das war nichts, habe mich verguckt..." Wenn der etwas propagiert, dann hat er es sicher ausgiebig getestet und weiß, wovon er spricht. Oder denkst du im ernst, wenn es mit Function besser geklappt hätte, wäre ihm das entgangen?
Man könnte auch ne Funktion nehmen die aus nem Literalobjekt {...} ein Funktionsobjekt macht:
ungefähr so:
toFunction (obj) {
F=function (){};
for (i in obj) { F[i]=obj[i] }
return F;
}
Das ergibt doch kein "Funktionsobjekt", lediglich ein normales mit den Eigenschaften und Methoden des übergebenen Objekts.
Der Ansatz ist aber nicht schlecht, das habe ich hier doch schon vorgestellt mit meiner function oobject () {...}.
Wieso willst du Crockfords Lösung denn partout nicht akzeptieren oder immer eine noch bessere finden? Was stört dich denn daran? Dass man Object nicht unbedenklich erweitern sollte? Das wird doch auch gar nicht verlangt. Nicht ohne Grund steht wohl sein Vorschlag mit Object.prototype ganz am Ende des Artikels. Für standalone-Scripts, die nicht mit anderen zusammen eingebunden werden, ist das auch kein Problem. Man muss halt mit for..in aufpassen.
Hmmm, ich denke er will die Funktion Object(){} , die der Konstruktor von Object ist, so überschreiben dass sie wie object() funktioniert, oder?
Naja, er will einfach die ganze Konstruktor-Denke hinter sich lassen und eben nicht mit Hilfe von Klassen vererben, die durch Konstruktoren definiert sind. Denn ein Konstruktor kann immer nur eine Art Objekt erzeugen, wie im Konstruktor notiert. Das ist eine Einschränkung, die in einer Sprache mit prototypischer Vererbung einfach unnötig ist. Der eingebaute new-Operator lässt das Ganze aber leider so aussehen, als müsse man doch immer Klassen definieren. Mit object() entschärft bzw. umgeht man diese Einschränkung, das ist alles.
Gruß, Don P