接受混合变量的适当术语是什么?

时间:2013-07-11 20:14:26

标签: javascript

我正在尝试查找接受“混合”变量的函数的最佳实践和技巧。这类似于jQuery对象接受字符串,对象和HTML元素的方式,并智能地指出要做什么。

但我不确定这种模式是什么。知识渊博的JavaScript开发人员如何参考这种技术?

例如:

function formatParams(mixed) {
    var params = {};
    switch (typeof mixed) {
        case 'string' :
            params = {query: mixed};
            break;
        case 'number' :
            params = {id: mixed};
            break;
        case 'function' :
            params = {callback: mixed}
            break;
        default: 
            params = mixed;
    }
    return params;
}

1 个答案:

答案 0 :(得分:1)

我不知道这个模式是否有名称,但我猜“通过多态参数进行准超载”可能是描述它的一种方式。它不是 true 多态或重载(因此限定符为“quasi”),而更多是JavaScript具有动态类型的结果。

我们可能会在这里进入“主观”领域,但我通常不喜欢“混合”参数,因为这会导致模糊性和可能的​​逻辑炸弹,当你处理参数时(基本上是巨大的和笨拙的switch-caseif-else,您尝试处理不同的参数组合。)

我更喜欢通过对象文字使用命名参数(或者至少是JavaScript允许的风格):

formatParams({
    stringParam: "string",
    numberParam: 42,
    booleanParam: true,
    functionParam: function() {
        ..
    }
});

然后在实际函数中,您可以检查每个参数的存在,并确保它是正确的类型:

function formatParams(options) {
    if(typeof options.stringParam !== "undefined" && typeof options.stringParam === "string") {
        //do what it is you want
    } else {
        throw "stringParam is expected to be of type 'string'.";
    }

    //and so on...
}

我发现这种形式的参数处理不易出错,更容易执行类型检查,也看看它们是否提供了所需的所有参数。