我正在使用下面的函数,我试图在不使用硬编码值的情况下概括函数。我怎么能实现它?
-DKEY=VALUE
答案 0 :(得分:0)
很高兴看到你的功能做了什么。
但是在你的功能中,你可以声明:
var j={"id":"return of your function string here"};
JSON.stringify(j); // '{"id":"return of your function string here"}'
答案 1 :(得分:0)
您可以创建函数对象,然后使用括号表示法和动态属性名称调用由strCondition
命名的函数。像这样:
var objOfFunctions = {
GetUserName: function (id) {...},
GetClaimStatus: function (id) {...},
GetClaimType: function (id) {...}
};
function ChangeIDToString(strCondition,id) {
if (!objOfFunctions.hasOwnProperty(strCondition)) {
return id;
}
return objOfFunctions[strCondition](id);
}
如果你已经在代码中的其他地方对objOfFunctios
中的函数进行了大量调用,那么你也可以使用引用来填充该对象。
A live demo using references in objOfFunctions
at jsFiddle
修改强>
在发现您之前问过同样的问题之后,看起来我的原始答案仍然是硬编码太多。 (Your comment无效的类似答案。)
通过将函数引用而不是字符串传递给ChangeIDToString
,仍然可以实现目标。虽然您将无法检查,但将调用哪个函数。像这样:
function ChangeIDToString(refCondition,id) {
if (typeof refCondition !== 'function') {
return id;
}
return refCondition(id);
}
// Invoke example
console.log(ChangeIDToString(GetClaimType, 'some_ID'));
如果字符串无法替换为引用,则最后的方法是使用eval()
,但强烈建议不要这样做。
答案 2 :(得分:0)
你不清楚你希望JSON在哪里/如何适合你的解决方案,但如果你说这些3个字符串中肯定会有一个传入函数,哪个函数从那里被调用传入哪个字符串,然后您可以利用JavaScript中所有参数都是可选的这一事实。只要你的函数只用2个参数(id和其中一个)调用,就可以这样做:
function ChangeIDToString(id, user, claimStatusId, claimTypeId)
{
if (user !== null)
return GetUserName(id)
else if (claimStatusId !== null)
return GetClaimStatus(id)
else if (claimTypeId !== null)
return GetClaimType(id);
else
return id;
}
https://jsfiddle.net/m271cpum/获取更完整的示例。