Hi,
- auf das Prototypobjekt verzichten und alle Methoden in den Konstruktor schreiben. Damit sind die öffentlichen Methoden priviligiert und haben Zugriff auf die privaten.
Vorteile:
- Kapselung durch private Methoden ist möglich
- Code ist leichter für Dritte zu verstehen
Nachteile:
- Alle Methoden liegen pro Objekt vor, kosten also mehr Speicherplatz
Da muss ich dir leider unrecht geben. Methoden, die innerhalb des Konstruktors definiert sind, machen für mich den Code nur unleserlicher und schlechter zu verstehen und zu warten. Closures machen die Sache eben nicht einfacher.
- alle Eigenschaften und Methoden öffentlich machen, damit Konstruktor und Prototype-Objekt miteinander kommunizieren können.
Vorteile:
- Sparsamerer Speicherverbrauch
Nachteile:- Kapselung bestimmter Methoden oder Eigenschaften ist nicht mehr möglich.
Das wäre meine favorisierte Vorgehensweise. Zwar sind private Methoden dann nicht wirklich privat, aber so ist es nun mal. Die Wartbarkeit, Lesbarkeit und der geringere Speicherplatzbedarf sind für mich wichtiger als die tatsächliche Kapselung.
Microsoft hat sich in seinem Client Framework übrigens auch für diesen Weg entschieden, und empfiehlt z.B. private Methoden durch einen _ am Anfang zu kennzeichnen.
MyClass.prototype =
{
_private: function()
{
},
publicMethod: function()
{
}
};
ist doch wesentlich einfacher zu überblicken, als alles im Konstruktor zu notieren, mit var oder this. Außerdem ähnelt es dem Sprachbild anderer OO Sprachen viel mehr, was meiner Meinung nach ein großes Plus für die Wartbarkeit durch Dritte darstellt.
Gruß.