Javascript中的对象参数,以及我们应该如何命名它们
object arguments in Javascript, and how should we name them?
为了增加灵活性,并在某种程度上提高代码的模块化,我已经开始将所有参数作为对象传递,(我知道我们在 ES6 中有 spread 运算符,它也带来了一些灵活性和旧的参数数组,但我喜欢这种方法(。
示例时间 :
var funky = function(options) {
//... do something with options.query, or options.limit etc
}
- 这种方法有什么技术缺点吗?
- 我们应该给它起什么名字? 它应该在整个代码库中保持一致,以便我们现在总是这个签名意味着这种方法,或者我们应该在上下文中命名它,即:对于获取一些数据的函数,"数据",或者对于构造函数
options
或"配置"等。
我正在考虑的问题:
- 我们 API 的可维护性和灵活性
- 清晰度和可读性(这种方法有牺牲 (
- 函数内的参数处理
- 性能(不确定这是否是一个问题,但很好奇(
我知道这是一个稍微基于意见的问题,但我希望从更广泛的开发人员社区开始讨论他们如何解决缓存失效之后的第二个最困难的问题,即命名事物。
认为这个约定对调用者来说很好。但是,您应该补偿因在函数签名中"隐藏"参数而造成的可读性损失。
基本步骤是记录参数:
// funky arguments:
// query: ...
// limit ...
var funky = function(options) {
}
但是你必须有纪律来记录所有的论点。每个接触代码的人都会有这种纪律吗?应该不会。
要强制执行文档并检测无效(例如删除(参数,您可以在函数的开头添加一个检查步骤:
var funky = function(options) {
checkArgs( [ query, //... what is query
limit, //... what is limit
], options );
}
如果options
包含未知参数,checkArgs
会发出警报,因此必须明确列出参数。
对于命名,我会使用一个通用但独特的名称,例如 _in
或 _args
.
函数和参数的良好名称会产生自文档代码。如果你有很多名为"data"的参数具有不同的含义,那么这并不好。阅读代码的程序员必须查找变量的所有用法才能理解它的含义。因此,您希望选择在特定模块的上下文中有意义的变量名称。
不要仅仅为了减少函数参数的数量而将一堆不相关的变量打包到一个"数据"对象中。相反,更喜欢标识相关变量组,并为每个组打包一个有意义的名称。
这种干净的编码技术在javascript应用程序中尤其重要(除了非常小的应用程序(,因为该语言无法帮助您。
如果您发现需要太多函数参数,请考虑使用setter函数的面向对象的实现,如下所示:
function F(x) {
// This is the constructor
this.x = x;
}
// These are additional setter functions:
C.prototype.set_a = function(a) {
this.a = a;
}
C.prototype.set_b = function(b) {
this.b = b;
}
C.prototype.set_c = function(c) {
this.c = c;
}
C.prototype.compute = function() {
// Do something with this.a, this.b and this.c
}
按如下方式使用此"类":
var f = new F(3);
f.set_a(1);
f.set_b(2);
f.set_c(3);
console.log(f.compute());
相关文章:
- 在javascript中使用命名空间
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 为什么不'我们在javascript中使用函数参数的数据类型
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- JavaScript命名约定;静态“;类或模块
- 我们如何使用css或JavaScript在i/j上更改句点(点)的颜色
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- 我们如何在不更改url的情况下使用锚点点击从一个页面重定向到另一个页面
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 如何使用javascript命名空间
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- 我们怎样才能将内含子J用于一组特定的元素
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 正在使用Dropzone.js删除服务器上已重命名的文件
- Javascript中的对象参数,以及我们应该如何命名它们
- 使用用于在同一函数中命名函数的变量名称有何意义
- 在 JavaScript 中命名匿名函数有何不同
- 我们可以在HTML5中重命名/写入本地文件吗
- 为什么我们不能传递一个命名函数而不是一个匿名函数呢?