我正在尝试查找接受“混合”变量的函数的最佳实践和技巧。这类似于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;
}
答案 0 :(得分:1)
我不知道这个模式是否有名称,但我猜“通过多态参数进行准超载”可能是描述它的一种方式。它不是 true 多态或重载(因此限定符为“quasi”),而更多是JavaScript具有动态类型的结果。
我们可能会在这里进入“主观”领域,但我通常不喜欢“混合”参数,因为这会导致模糊性和可能的逻辑炸弹,当你处理参数时(基本上是巨大的和笨拙的switch-case
或if-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...
}
我发现这种形式的参数处理不易出错,更容易执行类型检查,也看看它们是否提供了所需的所有参数。