Rolf b: static oder instanz bei einmaliger anwendung?

Beitrag lesen

Und unter der einzigen Instanz einer Klasse verstehst Du dann vermutlich das hier: ne sorry. ich meinte mit Objektinstanz new Foo( 'bar' ); und mit staischer Klasse Foo.bar().

Schreibte ich das nicht? Außer dass ich nicht 'bar' an den Konstruktor übergeben habe...

Ich mein eine Klassen muss ja erst einmal aus der Schablone der Klasse erzeugt werden.

Eine "Schablone der Klasse" gibt es nicht unbedingt. In einer statischen Programmiersprache macht das Meiste der Compiler für Dich, da ist ein new nicht mehr als eine Speicherallocation auf Stack oder Heap (was nur messbare Zeit kostet wenn der Müllsammler loslaufen muss) und das Kopieren von ein paar Bytes an Daten, die auf die VFT verweisen (Siehe "Vererbung" vom 31.01.17). In JavaScript kommt's drauf an, da baust Du entweder ein Prototypobjekt, und zwar genau einmal, und das ist genauso schnell wie das Erzeugen einer "statischen Klasse". Beim new MyClass() wird dein Prototyp zum Prototyp des neuen Objekts. Dafür wird genau eine Objektreferenz kopiert. Oder Du erzeugst die Instanzmethoden dynamisch im Konstruktor, und DANN wird's langsamer, weil dann für jede Methode ein Funktionsobjekt erzeugt wird. Im Falle eines Singleton-Objekts ist das aber auch wieder egal.

Klingt für mich nach mehr Aufwand als wenn eine statische klasse verwende die schon bereigestellt ist.

Ja schon. Aber es ist vor allem Schreibaufwand. Der Runtime-Aufwand wird kaum messbar sein. Wenn Du hier eine Entscheidung basierend auf Laufzeitkosten treffen willst, befinden wir uns im Bereich der Mikrooptimierung.

Wie schon mal gesagt, das entscheidende Kriterium für statische Klasse vs Singleton-Objekt ist, dass das Singleton-Pattern für JavaScript wenig relevant ist, weil die Sprache andere Möglichkeiten bereitstellt. Aus DIESEM Grund ist die statische Klasse das Richtige.

Rolf