javascript参数列表;寻找替代方案

时间:2011-03-27 20:26:35

标签: javascript

我正在编写一个javascript函数,它有很长的参数列表:

FormatGrid(ID, BackColor, SideColor, HiddenColor, SmallTextClass....) 

它运行良好,但是当调用此函数来记住每个参数及它们进入的顺序时会有点痛苦,因为该函数总共需要9个参数(我可能再添加2个参数)。

我想知道是否有一个优雅的解决方案。

感谢您的建议。

5 个答案:

答案 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");