我正在写,有一个相当长的参数列表中的JavaScript函数:javascript长参数列表;寻找替代
FormatGrid(ID, BackColor, SideColor, HiddenColor, SmallTextClass....)
它运作良好,但调用这个函数时,要记住每个参数的顺序,他们在去它变得有点痛因为该函数总共需要9个参数(我可能会再添加2个参数)。
我想知道是否有一个优雅的解决方案。
感谢您的建议。
我正在写,有一个相当长的参数列表中的JavaScript函数:javascript长参数列表;寻找替代
FormatGrid(ID, BackColor, SideColor, HiddenColor, SmallTextClass....)
它运作良好,但调用这个函数时,要记住每个参数的顺序,他们在去它变得有点痛因为该函数总共需要9个参数(我可能会再添加2个参数)。
我想知道是否有一个优雅的解决方案。
感谢您的建议。
你可以只通过一个对象
FormatGrid(myObject){
//your code
}
如果您myObject的是一样的东西{ID: '1', BackColor: 'red', SideColor: 'red', HiddenColor: 'black', SmallTextClass: 'true'...}
一般来说,我喜欢的格式如下
function foo(requiredVar1,requiredVar2,..,options) {
//here is where options is merged with default params
var defaultOptions = {};
options = Object.extend(defaultOptions,(options || {}));
}
其中options是地图{option1:value1, ...}
将对象传递给您作为参数功能:
function FormatGrid(objectParameter) {
// ...
}
FormatGrid({
key1: "val1",
key2: "val2",
...
});
还,您可以合并使用默认的给定函数的参数是这样的:
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.
}
如果调用FormatGrid含PARAMS背景色也将被使用,否则将被默认为默认(“0xFFF的”在这里)。
我希望这可以帮助:) 皮埃尔。
使用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");
好的,这就是我一直在寻找;谢谢。顺便说一句,这是参数加载的顺序吗?此外,我可以传递ID作为一个参数,然后传递对象:FormatGrid('BigGrid',BigGridFormat)? – frenchie 2011-03-27 20:42:17
顺序并不重要,因为它基本上就像一个关联数组 – kjy112 2011-03-27 20:53:30
如果我想让ID离开对象,该怎么办?我想传递参数(ID,GridFormat)。我有这样的GridFormat对象:StandardFormat({param1:'...',param2:'...',param:'...'});我可以写FormatGrid(“TopGrid”,StandardFormat); ? – frenchie 2011-03-27 22:58:31