我正在编写一个javascript函数,它有很长的参数列表:
FormatGrid(ID, BackColor, SideColor, HiddenColor, SmallTextClass....)
它运行良好,但是当调用此函数来记住每个参数及它们进入的顺序时会有点痛苦,因为该函数总共需要9个参数(我可能再添加2个参数)。
我想知道是否有一个优雅的解决方案。
感谢您的建议。
答案 0 :(得分:5)
你可以传入一个对象
FormatGrid(myObject){
//your code
}
你的myObject类似于{ID: '1', BackColor: 'red', SideColor: 'red', HiddenColor: 'black', SmallTextClass: 'true'...}
答案 1 :(得分:1)
一般来说,我喜欢以下格式
function foo(requiredVar1,requiredVar2,..,options) {
//here is where options is merged with default params
var defaultOptions = {};
options = Object.extend(defaultOptions,(options || {}));
}
其中,选项是地图{option1:value1, ...}
答案 2 :(得分:0)
将对象作为参数传递给函数:
function FormatGrid(objectParameter) {
// ...
}
FormatGrid({
key1: "val1",
key2: "val2",
...
});
答案 3 :(得分:0)
另外,您可以将给定的函数参数与默认的函数参数合并,如下所示:
function mergeWithDefaults (params, defaults={}) {
var toRet = {};
for (atr in defaults)
toRet[atr] = defaults[atr];
for (atr in params)
toRet[atr] = params[atr];
return toRet;
}
然后您可以在函数中使用此函数来“默认”参数:
FormatGrid (params) {
params = mergeWithDefaults (params, { 'backColor': '0xfff' });
// Body of your function using the params variable which has been defaulted.
}
如果你使用包含backColor的params调用FormatGrid,它将被使用,否则它将被默认为默认值('0xfff'在这里)。
我希望这有帮助:) 皮尔。
答案 4 :(得分:0)
使用options / params对象的另一种方法是创建已经填充了某些值的函数的新版本。当您需要重复调用相同的函数而不更改许多参数的值时,这非常有用。
// bad name; a good name would say something about
// the purpose of the new function
function makeShorterFormatGrid(ID, BackColor, SideColor) {
return function(HiddenColor, SmallTextClass) {
FormatGrid(ID, BackColor, SideColor, HiddenColor, SmallTextClass);
}
}
var ShortFormatGrid = makeShorterFormatGrid("myId", "#ffffff", "#000000");
// the first three arguments are already filled in
ShortFormatGrid("#c0c0c0", "className");
ShortFormatGrid("#cccccc", "otherClassName");