Hi
Dann kann ich doch nicht einfach { a : "b" }.begetObject() schreiben, was ja der Sinn der Sache war.
ARGHH ... !!!!!!
sowas passiert wenn man direkt im Browser testet, und die Konstrukte des letzten Durchlaufs noch im Namensraum sind ...
Tatsächlich funktioniert es nur bei Kind-Objekten die bereits mit object() erzeugt wurden, weil die ja alle Konstruktoren sind ("return new F();").
Nein, tut's leider nicht. Habe mich aber auch verguckt.
Sowas obj= new F() erbt nicht von der Funktion F sondern vom prototyp von F. Der ist aber irgendwas, wenn er Literal definiert wurde nur ein Abkömmling von "Object" und nicht von "Function".
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 ...
oder man bräuchte eine literale schreibweise für Funktionen
Du meinst fürs Funktionsobjekt, ja das würde funktionieren.
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;
}
dann b0=toFunction({...});
oder halt eine eigene Objektklasse Begetter erschaffen.
b0=new Begetter({...});
b1=b0.beget(); usw...
aber dann kann man eigentlich auch gleich bei object() bleiben.
Dann könnte ich die Methode auch ans globale Host-Objekt window
wo ist dann der Unterschied zu einer einfachen Funktion object()?
oder an den Object-Konstruktor (nicht dessen prototype) kleben, weil ich sie ohnehin umformen muss, sodass sie das Objekt als Parameter enthält, anstatt dass sie über this darauf zugreifen kann.
verstehe ich nicht kannst du mir dafür ein Beispiel zeiegn?
Hmmm, ich denke er will die Funktion Object(){} , die der Konstruktor von Object ist, so überschreiben dass sie wie object() funktioniert, oder?
Das ist aber nicht ungefährlich wie die Diskussion von von Murphy/Kurt zeigt.
Möge die Engine mit euch sein!
LanX