Javascript中的对象参数,以及我们应该如何命名它们

object arguments in Javascript, and how should we name them?

本文关键字:何命名 我们 对象 参数 Javascript      更新时间:2023-09-26

为了增加灵活性,并在某种程度上提高代码的模块化,我已经开始将所有参数作为对象传递,(我知道我们在 ES6 中有 spread 运算符,它也带来了一些灵活性和旧的参数数组,但我喜欢这种方法(。

示例时间 :

var funky = function(options) {
    //... do something with options.query, or options.limit etc
}
  1. 这种方法有什么技术缺点吗?
  2. 我们应该给它起什么名字? 它应该在整个代码库中保持一致,以便我们现在总是这个签名意味着这种方法,或者我们应该在上下文中命名它,即:对于获取一些数据的函数,"数据",或者对于构造函数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());