我正在使用类似的方法定义一个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/
此致
答案 0 :(得分:0)
假设您没有像返回国家名称那样做一些简单的事情(任何实际数据应存储在数据库中,而不是存储在前端代码中),最佳解决方案将归结为您实际尝试的内容去做。以下是基于两种不同场景的两种选择:
情景1
你有大多数相同的逻辑,只有一些国家特定的例外:
ctx.globalAlpha
上的switch
countryId
&#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
countryId
&#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);