Ich würde gerne wissen, ob das Modulmuster oder das Konstruktor- / Prototypmuster für meine Arbeit besser geeignet ist.
Grundsätzlich verwende ich unauffälliges Javascript - das HTML-Dokument enthält einen Verweis auf die .js-Datei.
Mein Verständnis des Modulmusters:
- Rufen Sie eine INIT-Methode auf (die im Grunde eine öffentliche Methode ist, die ich mithilfe des Modulmusters erstellen und zurückgeben kann).
- Weisen Sie in der INIT-Methode alle Klickereignisse usw. zu.
Dies klingt nach dem perfekten Muster für meine Situation, da ich keine Objekte und Vererbungshierarchien usw. erstellen muss.
Mein Verständnis des Konstruktor / Prototyp-Musters:
- zum Erstellen von Objekten
- zur Verwendung der Vererbung (dh Subtypen eines Supertyps)
Stimmt es, dass für die Bereitstellung von unauffälligem Javascript das Modulmuster ideal ist?
Object
als Suche. Erstellen Sie entweder ein Objektliteral direkt wievar MyModule= { someProperty: 3, someFunction: function() { ... }, somethingElse: null };
oder weisen Sie es zuMyModule.someFunction= function() { ... };
. Wenn Sie private Variablen wollen, tun Sie dies in einem sofort aufgerufenen Funktionsausdruck und haben dasreturn
Objekt in einem Abschluss ... persönlich finde ich 'echte' private Variablen eine völlige Zeitverschwendung.Das Modulmuster ist weitaus einfacher und eleganter als der Prototyp. Denken Sie jedoch zuerst mobil. Es ist kein relevantes Muster für mittlere / große Objekte, da bei der Initialisierung vor dem Start der gesamte Block analysiert werden muss. Die mehrfachen Schließungen erzeugen auch kreisförmige Abhängigkeiten, die der Garbage Collector nicht freigibt (insbesondere IE). Dies führt zu einem größeren Speicherbedarf, der erst freigegeben wird, wenn das Fenster (oder die Registerkarte) geschlossen wird. Überprüfen Sie den Chrome-Task-Manager, um zu vergleichen. Die Ladezeit ist umgekehrt proportional zur Objektgröße unter Verwendung des Modulmusters, während dies bei der prototypischen Vererbung nicht der Fall ist. Die obigen Aussagen werden durch mehrere Benchmarks wie diesen überprüft: http://jsperf.com/prototypal-performance/54
Wie im letzten Test gesehen. Kleine Objekte sollten besser als einfaches Objekt initialisiert werden (ohne diese Muster). Es eignet sich für einzelne Objekte, die weder geschlossen noch vererbt werden müssen. Es ist ratsam zu beurteilen, ob Sie diese Muster überhaupt benötigen.
quelle
Das Prototypmuster hilft uns, die Funktionalität zu erweitern, und es gibt nur eine Instanz von Funktionen in einem Speicher, unabhängig von der Anzahl der Objekte. In Module patter erstellt jedes Objekt eine neue Instanz von Funktionen im Speicher, bietet jedoch ein Konzept für private / öffentliche Variablen und hilft bei der Kapselung der Variablen und Funktionen.
quelle