2011-03-27 26 views
4

我正在写,有一个相当长的参数列表中的JavaScript函数:javascript长参数列表;寻找替代

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

它运作良好,但调用这个函数时,要记住每个参数的顺序,他们在去它变得有点痛因为该函数总共需要9个参数(我可能会再添加2个参数)。

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

感谢您的建议。

回答

5

你可以只通过一个对象

FormatGrid(myObject){ 
//your code 
} 

如果您myObject的是一样的东西{ID: '1', BackColor: 'red', SideColor: 'red', HiddenColor: 'black', SmallTextClass: 'true'...}

+0

好的,这就是我一直在寻找;谢谢。顺便说一句,这是参数加载的顺序吗?此外,我可以传递ID作为一个参数,然后传递对象:FormatGrid('BigGrid',BigGridFormat)? – frenchie 2011-03-27 20:42:17

+0

顺序并不重要,因为它基本上就像一个关联数组 – kjy112 2011-03-27 20:53:30

+0

如果我想让ID离开对象,该怎么办?我想传递参数(ID,GridFormat)。我有这样的GridFormat对象:StandardFormat({param1:'...',param2:'...',param:'...'});我可以写FormatGrid(“TopGrid”,StandardFormat); ? – frenchie 2011-03-27 22:58:31

1

一般来说,我喜欢的格式如下

function foo(requiredVar1,requiredVar2,..,options) { 
//here is where options is merged with default params 
var defaultOptions = {}; 
options = Object.extend(defaultOptions,(options || {})); 
} 

其中options是地图{option1:value1, ...}

0

将对象传递给您作为参数功能:

function FormatGrid(objectParameter) { 
    // ... 
} 

FormatGrid({ 
    key1: "val1", 
    key2: "val2", 
    ... 
}); 
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. 
} 

如果调用FormatGrid含PARAMS背景色也将被使用,否则将被默认为默认(“0xFFF的”在这里)。

我希望这可以帮助:) 皮埃尔。

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