在创建具有多个参数的 JavaScript 函数时,我总是面临这样的选择:传递参数列表还是传递选项对象。
例如,我正在编写一个函数来将 nodeList 映射到数组:
function map(nodeList, callback, thisObject, fromIndex, toIndex){
...
}
我可以改用这个:
function map(options){
...
}
其中 options 是一个对象:
options={
nodeList:...,
callback:...,
thisObject:...,
fromIndex:...,
toIndex:...
}
推荐的方式是哪一种?是否有关于何时使用一种与另一种的指南?
[更新] 似乎有一个支持选项对象的共识,所以我想添加一条评论:在我的案例中,我很想使用参数列表的一个原因是行为一致使用 JavaScript 内置的 array.map 方法。
最佳答案
与许多其他人一样,我通常更喜欢将 options 对象
传递给函数,而不是传递一长串参数,但这实际上取决于确切的上下文。
我使用代码可读性作为试金石。
例如,如果我有这个函数调用:
checkStringLength(inputStr, 10);
我认为代码的可读性很好,传递单个参数也很好。
另一方面,有些函数的调用如下:
initiateTransferProtocol("http", false, 150, 90, null, true, 18);
除非您进行一些研究,否则完全无法阅读。另一方面,这段代码读起来很好:
initiateTransferProtocol({
"protocol": "http",
"sync": false,
"delayBetweenRetries": 150,
"randomVarianceBetweenRetries": 90,
"retryCallback": null,
"log": true,
"maxRetries": 18
});
它更像是一门艺术而不是一门科学,但如果我不得不说出经验法则:
在以下情况下使用选项参数:
https://stackoverflow.com/questions/12826977/