Magazine Informatica

Javascript module pattern con costruttore con argomenti

Creato il 01 febbraio 2018 da Sherlock36

Javascript module pattern

Come scritto su Javascript: the good parts, un modulo è una funzione o un oggetto che presenta una interfaccia ma nasconde il suo stato e la sua implementazione.

Ho infatti utilizzato il pattern module quando ho avuto la necessità di incapsulamento, cioè di avere un metodo di una classe che avesse una interfaccia pubblica ma nascondesse i dettagli della sua implementazione.

Oltre all’incapsulamento mi serviva avere un costruttore con argomenti, ho quindi introdotto anche esso nel codice che segue e che implementa il module pattern con costruttore.

function module(name) {
	this.name = name;
} 

module.prototype = (function() {
	var i = 0;

	function myPrivateFun() {
		console.log("private " + i++);
	}
	
	function myPublicFun() {
                myPrivateFun();
		console.log(this.name);
	}
	
	return {
		publicFun: myPublicFun
	};
	
})();

var m = new module("john");
m.publicFun(); // private 0 John

Il costruttore è definito nel modo usuale disponibile in Javascript.

Il pattern module è utilizzato nell’implementazione del prototype, dove abbiamo

  • privateFun che è una funzione privata, visibile solo da publicFun
  • publicFun che è una funzione pubblica, visibile esternamente
  • il return che restituisce un oggetto i cui membri sono visibili esternamente, e dove quindi inseriamo i metodi pubblici

Abbiamo utilizzato nel codice:

  • invocazione immediata delle funzioni
  • closures

Invocazione immediata delle funzioni

Detta in inglese IIFE (immediately invoked function expressions), l’invocazione immediata delle funzioni, del tipo

(function() {
 })();

fa si che la funzione venga eseguita immediatamente, e che ne venga restituito il risultato mediante il return di cui sopra

Le closure

Le closure, chiusure in italiano, fanno sì che  che le funzioni definite in un certo scope continuino ad avere accesso alle variabili accessibili da quello scope anche quando la funzione più esterna che definiva quello scope è terminata. Nell’esempio si vede come si acceda alla variabile i anche quando la funzione più esterna è terminata.


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :