当创建带有多个参数的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
给函数,而不是传递一长串参数,但这实际上取决于确切的上下文。
我将代码的可读性用作石蕊测试。
例如,如果我有此函数调用:
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参数:
The most common method for utilizing Fabric is via its command-line tool, fab, which should have been placed on your shell’s executable path when Fabric was installed. fab tries hard to be a good Unix
问题内容: 尝试在angularjs中选择关于对象值的多个选项 这是一个代码: 和html jsfiddle上的(非)工作示例 http://jsfiddle.net/andrejkaurin/h9fgK/ 问题答案: 您尝试使用选择倍数(如复选框列表),这有点奇怪。多选输出一个数组。您不能将ng- model放在这样的选项标签上,而是放在选择本身上。因此,由于select将输出值数组,因此您需要
选项放在哪里 module.exports = { // ... module: { rules: [ { test: /\.vue$/, loader: 'vue-loader', options: { // `vue-loader` options } } ]
transformAssetUrls 类型:{ [tag: string]: string | Array<string> } 默认值: { video: ['src', 'poster'], source: 'src', img: 'src', image: ['xlink:href', 'href'], use: ['xlink:href', 'href'] } 在模板编
删除模式 可以从 常规选项中选择下面列出的三种删除模式修改删除文件的行为。 它们只在“压缩后删除原文件”选项打开时才生效。您可以在默认的压缩配置文件中启用任意一个选项来修改“压缩后删除原文件”的行为。 删除文件 普通删除文件。文件被永久删除,但是不安全,有些时候可能被使用特殊软件恢复。 移动文件到回收站 删除文件被放到回收站中。 清除文件 删除文件前使用0字节覆盖文件数据,防止删除的文件被恢复,文
问题内容: 我想为一组SQL查询创建一个过滤器,以便用户最多可以通过三个值过滤SQL SELECT。用户界面具有三个文本框,每个文本框都将绑定到SQL表中的列名。用户可以通过这些文本框提供一个,两个或三个条件。 到目前为止,这就是我所拥有的。我知道这些声明将不起作用,但是我找不到解决该问题的方法。(使用不会返回任何结果。 问题答案: 如果我正确遵循,您想根据所有填充变量过滤结果,以处理未填充变量,