2012-11-28 19 views
5

Da una singola istanza e un punto di vista di più istanze, perché dovrei scrivere tutte quelle righe aggiuntive di codice seguendo il Pattern modulo vs semplicemente utilizzando un Costruttore standard con metodi e proprietà definiti nel corpo del costruttore?Modello modulo JavaScript rispetto a Costruttore con metodi definiti nel costruttore

Modulo modello di esempio: http://jsfiddle.net/T3ZJE/1/

var module = (function() { 
    // private variables and functions 
    var foo = 'bar'; 

    // constructor 
    var module = function() { 
    }; 

    // prototype 
    module.prototype = { 
     constructor: module, 
     something: function() { 
     } 
    }; 

    // return module 
    return module; 
})(); 

var my_module = new module(); 

console.log(my_module) 


Costruttore campione: http://jsfiddle.net/EuvaS/2/

function Module(){ 

    // private variables and functions 
    var foo = 'bar'; 

    //public methods 
    this.something = function() { 

    }   
} 

var my_module = new Module(); 

console.log(my_module); 

Per me il risultato finale è praticamente la stessa. Entrambi possono avere proprietà e metodi pubblici, entrambi possono avere variabili e metodi "privati" a cui è possibile accedere con metodi pubblici.

Entrambi definiranno i metodi public/prototype una volta per un singleton, entrambi li definiranno più volte per più istanze/cloni dell'oggetto.

Mi manca qualcosa? Qual è la differenza?

risposta

14

Nel primo esempio, foo sarà una variabile statica comune a tutte le istanze di module(). Significato, tutte le istanze faranno riferimento alla stessa variabile.

Nel secondo esempio, foo è diverso per ogni istanza di Module().

A parte questo, non vedo alcuna differenza.

+0

Questa è davvero una differenza importante. – Fergal

+1

Per poops e risatine, questa leggera modifica al metodo Constructor creerà vars private statiche E definirà i nostri metodi pubblici una sola volta consentendo loro l'accesso a tutti i private vars nell'ambito Constructor: http://jsfiddle.net/zHwQX/2/ – Fergal

+0

@Fergal buon punto, non l'ho visto neanche io. Quindi immagino che in generale, più funzionalità e un minore ingombro di memoria – Damp

0

Niente differenza speciale. Ma non sono sicuro di quale sia il punto del modello di modulo in questo esempio. Non è necessario includere il costruttore nel modulo. I costruttori dovrebbero essere usati come il secondo stile. Ma è meglio che i metodi siano definiti nel suo oggetto prototipo a meno che non sia necessario averlo per ogni istanza.

Sempre in termini di scopo, non penso che lo schema del modulo qui sia corretto.

+0

Ho ricevuto questo frammento da qui: http: //briancray.com/posts/javascript-module-pattern – Fergal

+0

@Fergal Beh, non sono sicuro che la sua opinione sia appropriata per il modello. Come hai detto nella tua domanda, avere un costruttore nel modulo è un lavoro extra che non è necessario, penso. Non riesco a trovare alcun merito. –

Problemi correlati