Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript模块模式:默认值_Javascript_Module_Design Patterns - Fatal编程技术网

JavaScript模块模式:默认值

JavaScript模块模式:默认值,javascript,module,design-patterns,Javascript,Module,Design Patterns,我正在从事一个项目,在这个项目中,我们使用一种模式来定义“模块”(即有效的公共静态类),其中每个模块都有一个init(),一旦定义了模块就应该调用它。它看起来像: MyNamespace.MyModule = (function () { var my = {}; my.init = function(config) { // setup initial state using config }; return my; })(); 我在这个代码库

我正在从事一个项目,在这个项目中,我们使用一种模式来定义“模块”(即有效的公共静态类),其中每个模块都有一个
init()
,一旦定义了模块就应该调用它。它看起来像:

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

没有太大的区别,其实都是关于你能读到什么。我个人喜欢第二种方法,因为它将默认值与逻辑分离。

第二个示例遵循最佳实践,初始化成员,然后在配置中未提供任何内容的情况下使用其默认值作为默认值。如果默认参数可以包含复杂对象作为子参数,则第二种方法也会更好。