如何区分javascript中参数变化的类似方法?

时间:2017-03-14 00:05:09

标签: javascript

我正在使用类似的方法定义一个js文件,但它们可能因应用程序中所选国家/地区的业务逻辑而异,这只是我正在做的一点演示:

HTML

Date: <span id="date"></span>
<br>
<p>Current country: <span id="country"></span></p>

JS

(function() {

    // data retrieved from somewhere: 1.Germany, 2.France, etc ...
    var countryId = 1;

    function myModule() {
        this.common = {
            getCountryName: function() {
                return "I'm the whole world!";
            },
            getDate: function() {
                return new Date();
            }
        };

        this.germany = {
            getCountryName: function() {
                return "I'm Germany!";
            }
        };

        this.france = {
            getCountryName: function() {
                return "I'm France!";
            }
        };

        return {
            common: this.common,
            germany: this.germany,
            france: this.france
        }
    }

    var fn = function(fnName) {
        var country, module, exists;

        country = getCountry(countryId);
        module = new myModule();
        exists = !!module[country] && !!module[country][fnName];

        return exists ? module[country][fnName] : module.common[fnName];
    };

    function getCountry(countryId) {
        var countryName = "";
        switch (countryId) {
            case 1:
                countryName = "germany";
                break;
            case 2:
                countryName = "france";
                break;
        };

        return countryName;
    }

    window.demoModule = {
        getDate: fn("getDate"),
        getCountryName: fn("getCountryName")
    }
}());

(function() {
    $(document).ready(initialize);

    function initialize() {
        $("#date").text(demoModule.getDate().toLocaleDateString());
        $("#country").text(demoModule.getCountryName());
    }

}());

我想做这样的事情因为我需要不同的功能,这取决于所选的国家,但它看起来有点复杂,你知道一个更好或更简单的方法来处理这样的事情吗?

小提琴:https://jsfiddle.net/odsu8oLf/5/

此致

2 个答案:

答案 0 :(得分:0)

假设您没有像返回国家名称那样做一些简单的事情(任何实际数据应存储在数据库中,而不是存储在前端代码中),最佳解决方案将归结为您实际尝试的内容去做。以下是基于两种不同场景的两种选择:

情景1
你有大多数相同的逻辑,只有一些国家特定的例外:
ctx.globalAlpha上的switch

&#13;
&#13;
countryId
&#13;
&#13;
&#13;

情景2
每个国家的逻辑都截然不同 将差异提取到function doLogic(countryId) { // do any possible common logic here switch (countryId) { case 1: return "France" case 2: return "Germany" case 3: case 4: case 5: return "special logic for 3 4 and 5" default: return "same for all the rest" } } console.log(doLogic(1)) console.log(doLogic(4)) console.log(doLogic(9999)) - >的对象中逻辑fn

&#13;
&#13;
countryId
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我不知道我是否省略了你的一些代码,但我认为你可以简化这样的模块化:

    var Country = (function() {
        return {
        countryId : 3,
      germany   : 'Im Germany',
      france : 'Im France', 
     initialize : function(countryId)
     {
            $("#date").text(this.getDate().toLocaleDateString());
        $("#country").text(this.getCountry(countryId));
     },
      getDate: function() 
      {
            return new Date();
      },
      getCountry : function(countryId)
      {
            var countryName = "";
        switch (countryId) {
            case 1:
                countryName = "germany";
                break;
            case 2:
                countryName = "france";
                break;
             default:
                    countryName = "I'm the whole world!";
        };
        return countryName;
        }
    };
})();
Country.initialize();


  Country.initialize(1);