什么'这是接受混合变量的恰当术语

What's the proper term for accepting mixed variables?

本文关键字:变量 混合 术语 什么      更新时间:2023-09-26

我正在努力查找接受"混合"变量的函数的最佳实践和技术。这类似于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;
}

我不知道这个模式是否有名字,但我想"通过多态参数的准重载"可能是描述它的一种方式。它不是真的多态性或重载(因此限定符"quaid"),而是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...
}

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