Direi no-ish . Non sono sicuro che sia veramente il "modello di modulo" se restituisci qualcosa di diverso da un singleton. Ma puoi certamente usare lo stesso "schema" per realizzare altre cose.
Il modulo protegge l'ambito globale dalle variabili interne utilizzate per creare il valore di ritorno; ma il valore restituito può essere esso stesso una funzione, incluso un costruttore.
A tal fine, se hai bisogno di un qualche tipo di membro di classe "statico privato" che desideri che tutte le istanze di una classe accedano, il modello di modulo può farlo.
Come esempio stupido, supponiamo che tu stia creando una classe Counter
, in cui ogni singolo Counter
deve tracciare un determinato evento, ma in cui anche desidera un protetto TotalCountEvents
su tutti gli oggetti Counter
, puoi eseguire questa operazione:
var Counter = (function() {
var totalcount = 0;
var constructor = function() {
var count = 0;
this.increment = function() { count += 1; totalcount += 1; };
this.getCount = function() { return count; };
};
constructor.getTotalCount = function() { return totalcount; };
return constructor;
})();
Puoi quindi usarlo in questo modo:
var counterA = new Counter();
var counterB = new Counter();
counterA.increment(); counterA.increment();
counterB.increment(); counterB.increment(); counterB.increment();
console.log(counterA.getCount(), counterB.getCount(), Counter.getTotalCount());
E vedrai:
> 2 3 5
Tuttavia, l'accesso al totalcount
sottostante sarà limitato alle istanze di Counter
.
Tenete a mente che lo schema di fabbrica può realizzare lo stesso tipo di cose, solo con differenze stilistiche / sintattiche. Cambiare la tua fabbrica in modo che assomigli ad un "modulo" ti permette principalmente di creare istanze con new
... che è tabù in alcune cerchie comunque.