Olaf Schneider: begrenzte Sichtbarkeit lokaler Werte bzw. Objekte einer Funktion

Beitrag lesen

Hallo Peter,

var Foo = (function (/id/) { // [[Foo]] constructor wrapper

...


> > Dieser Code wird jedes Mal ausgeführt, wenn ich new Foo() aufrufe.  
> > Richtig?  
  

> nein, die von mir holprig als \*constructor wrapper\* bezeichnete  
> »function expression« wird in einem rutsch initialisiert und eben  
> genau einmal ausgefuehrt.  
> […]  
  
Ich glaube, erst jetzt habe ich Dein Konstukt wirklich verstanden. Klar – Foo wird ja nur einmal zur Laufzeit ausgeführt und mit dem Rückgabewert der anonymen Funktion besetzt.  
  

> was ich vermute, aber weder recherchieren noch beweisen kann, ist,  
> dass hier, analog zu prototypischen erweiterungen, der kontext der  
> in diesem bsp. bisher einzigen oeffentliche funktoren-methode  
> [showSpecialId] erst zur laufzeit beim zugriff auf ebenjene methode  
> durch ein [Foo]-objekt aufgeloest wird.  
> […]  
> ... ich stochere da im nebel und bedarf selber der dringenden  
> aufklaerung ueber das echte laufzeitverhalten dieser speziellen  
> konstellation.  
  
Hm, das interessiert mich auch. Javascript ist ganz schön mächtig, meiner Meinung nach aber nicht immer auf den ersten Blick intuitiv.  
  
[…]  
  

> falls ich mit meinen vermutungen richtig liege, geht die von mir  
> vorgestellte variante schonender mit arbeitsspeicher um, da jede  
> einzelne [[Foo]]-instanziierung weniger overhaed erzeugt, als es  
> der code Deines beispiels tut. vielleicht ist mein konstrukt sogar  
> schneller. klarheit schafft hier nur ein performance-test.  
  
Volle Zustimmung.  
  

> > Meine ursprüngliche Frage zielte darauf ab, bestimmte Teile  
> > wirklich nur einmal im Prototype zu haben, damit bestimmte  
> > Funktionen (aber eben nicht alle) nur einmal vorhanden sind  
> > und nicht in jeder Objektinstanz.  
>   
> wenn alles richtig gedacht war, leistet mein muster genau das.  
  
Ja, jetzt auf meinen zweiten (äh dritten, äh vierten) Blick ja.  
  
Ich werde an diesem Thema mal dranbleiben und wenn ich interessante Neuigkeiten habe, mich wieder in der einen oder anderen Form melden.  
  
Gruß  
Olaf