当创建带有多个参数的JavaScript函数时,我总是面临这样的选择:传递参数列表与传递选项对象。
例如,我正在编写一个将nodeList映射到数组的函数:
function map(nodeList, callback, thisObject, fromIndex, toIndex){ ... }
我可以改用这个:
function map(options){ ... }
其中options是一个对象:
options={ nodeList:..., callback:..., thisObject:..., fromIndex:..., toIndex:... }
推荐哪种方法?是否有关于何时使用一个与另一个的指南?
[更新]对于选项对象似乎已经达成共识,所以我想添加一条评论:在我的案例中,我很想使用参数列表的原因之一是其行为与JavaScript一致内置array.map方法。
像许多其他方法一样,我通常更喜欢将an传递options object给函数,而不是传递一长串参数,但这实际上取决于确切的上下文。
options object
我将代码的可读性用作石蕊测试。
例如,如果我有此函数调用:
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 });
它更多地是一门艺术,而不是一门科学,但如果我必须说出经验法则:
在以下情况下,请使用options参数: