2012-04-10 80 views
3

我正在使用模式来定义“模块”(即有效的公共静态类)的项目,其中每个模块都有一个init(),应在模块定义完成后调用它。它看起来像:JavaScript模块模式:默认值

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

我看到这个代码库两种模式来定义config默认设置,不知道这是否有任何的优势或劣势,我不是马上看到一个可能会更好—。建议?

这是第一个:

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; 
})(); 

而这里的第二个:

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

第二个示例通过初始化您的成员,然后使用它们的默认值作为默认值(如果配置中未提供任何内容)来遵循最佳做法。 – Maess 2012-04-10 16:21:59

+3

如果默认参数可以包含复杂对象作为子参数,则第二种变体也更好。 – 2012-04-10 16:23:51

回答

4

没有多大的差别,它的真正意义是什么可读的给你。我个人喜欢第二种方法,因为它将默认值与逻辑分开。