2011-03-27 70 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");