2012-04-10 6 views
3

Ich arbeite an einem Projekt, wo wir ein Muster verwenden, um "Module" (dh effektiv öffentliche statische Klassen) zu definieren, wobei jedes Modul eine init() hat, die aufgerufen werden soll, sobald das Modul definiert wurde . Es sieht aus wie:JavaScript-Modul Muster: Standardwerte

MyNamespace.MyModule = (function() { 
    var my = {}; 
    my.init = function(config) { 
     // setup initial state using config 
    }; 
    return my; 
})(); 

ich zwei Muster in diesem Code-Basis zu sehen config Standardwerte zu definieren und sich fragen, was man vielleicht — besser, wenn es irgendeinen Vorteil oder Nachteil, dass ich nicht sofort zu sehen. Empfehlungen?

Hier ist der erste:

MyNamespace.MyModule = (function() { 
    var my = {}, 
     username, 
     policyId, 
     displayRows; 

    my.init = function(config) { 
     config = config || {}; 
     username = config.username || 'Anonymous'; 
     policyId = config.policyId || null; 
     displayRows = config.displayRows || 50; 
    }; 

    return my; 
})(); 

Und hier ist das zweite:

MyNamespace.MyModule = (function() { 
    var my = {}, 
     username = 'Anonymous', 
     policyId = null, 
     displayRows = 50; 

    my.init = function(config) { 
     config = config || {}; 
     username = config.username || username; 
     policyId = config.policyId || policyId; 
     displayRows = config.displayRows || displayRows; 
    }; 

    return my; 
})(); 
+0

Das zweite Beispiel folgt Best Practices, indem Sie Ihre Mitglieder initialisieren und dann ihre Standardwerte als Standardwerte verwenden, wenn in der Konfiguration nichts angegeben ist. – Maess

+3

Die zweite Variante ist auch besser, wenn Standardparameter komplexe Objekte als Subparameter enthalten können. –

Antwort

4

Es gibt nicht viel Unterschied ist, es ist wirklich alles, was Sie lesbar ist. Ich persönlich mag die zweite Methode, weil sie die Voreinstellungen von der Logik trennt.