如何概括一个函数?

时间:2016-01-14 11:50:22

标签: javascript

我正在使用下面的函数,我试图在不使用硬编码值的情况下概括函数。我怎么能实现它?

-DKEY=VALUE

3 个答案:

答案 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'));

A demo at jsFiddle

如果字符串无法替换为引用,则最后的方法是使用eval(),但强烈建议不要这样做

An eval demo at jsFiddle

答案 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/获取更完整的示例。