Ein Nachteil dieses Musters ist, dass wenn eine private Funktion auf eine öffentliche Funktion verweist, diese öffentliche Funktion nicht überschrieben werden kann, wenn ein Patch notwendig ist. Dies liegt daran, dass die private Funktion weiterhin auf die private Implementierung verweist und das Muster nicht auf öffentliche Elemente, sondern nur auf Funktionen angewendet wird.
Hat jemand ein Beispiel dafür, was er damit meint?
Vergleichen Sie ein Objekt, das mit einem Objektliteral erstellt wurde, mit einem Objekt, das mit dem Aufdeckungsmodulmuster erstellt wurde.
Hier wird ein Objekt als Literal erstellt.
%Vor% Wenn Sie die öffentliche Methode getName
für das zurückgegebene Objekt überschreiben, übernimmt die sayHello
-Methode, die von getName
abhängt, die Änderung. Dies liegt daran, dass im Objekt-Literal-Stil Verweise auf öffentliche Funktionen über this
, das zurückgegebene Objekt, erstellt werden.
Wenn Sie jedoch das Enthüllungsmodulmuster verwenden,
%Vor% Der RMP-Greeter wird die Überschreibung für die öffentliche getName
-Methode nicht übernehmen. Dies liegt daran, dass RMP-Funktionen, die auf andere Funktionen verweisen (sowohl öffentliche als auch private), auf die private Abschlusskopie und nicht auf die öffentliche Funktion verweisen, die dem zurückgegebenen Objekt zugeordnet ist.
Aus diesem Grund betrachte ich das Aufdecken des Modulmusters als Anti-Pattern.
Ich würde getName
an dieses binden, was anscheinend auf den in RMP zurückgegebenen Inhalt zeigt.
Ich bevorzuge das jedoch:
%Vor%Tags und Links javascript revealing-module-pattern