我正在寫,有一個相當長的參數列表中的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