Was ist mit "public function kann nicht überschrieben werden, wenn ein Patch notwendig ist." in Addys Beschreibung des Revealing Module Patterns?

8
  

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?

Verknüpfen Sie mit dem oben aufgezeigten Modulmodulmuster

    
gogogadgetinternet 21.02.2014, 05:07
quelle

2 Antworten

12

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.

    
I-Lin Kuo 21.02.2014 10:40
quelle
1

Ich würde getName an dieses binden, was anscheinend auf den in RMP zurückgegebenen Inhalt zeigt.

%Vor%

Ich bevorzuge das jedoch:

%Vor%     
Sumi Straessle 23.02.2015 14:18
quelle