配置对象

配置对象模式是一种为自己的代码提供更简洁的API的方法,如果你正在写一个即将被其它程序调用的类库之类的代码的时候就特别有用。

软件在开发和维护过程中需要不断改变是一个不争的事实。这样的事情总是以一些有限的需求开始,但是随着开发的进行,越来越多的功能会不断被加进来。

设想一下你正在写一个名为addPerson()的函数,它接受一个姓和一个名,然后在列表中加入一个人:

  1. function addPerson(first, last) {...}

然后你意识到,生日也必须要存储,此外,性别和地址也作为可选项存储。所以你修改了函数,添加了一些新的参数(还得非常小心地将可选参数放到最后):

  1. function addPerson(first, last, dob, gender, address) {...}

这个时候,函数已经显得有点长了。然后,你又被告知需要添加一个用户名,并且不是可选的。现在这个函数的调用者需要将所有的可选参数传进来,并且得非常小心地保证不弄混参数的顺序:

  1. addPerson("Bruce", "Wayne", new Date(), null, null, "batman");

这样传一大串的参数真的很不方便。一个更好的办法就是将它们替换成一个参数对象,我们叫它conf,是“configuration”(配置)的缩写:

  1. addPerson(conf);

然后这个函数的使用者就可以这样:

  1. var conf = {
  2. username: "batman",
  3. first: "Bruce",
  4. last: "Wayne"
  5. };
  6. addPerson(conf);

配置对象模式的好处是:

  • 不需要记住参数的顺序
  • 可以很安全地跳过可选参数
  • 拥有更好的可读性和可维护性
  • 更容易添加和移除参数

配置对象模式的坏处是:

  • 需要记住参数的名字
  • 参数名字不能被压缩

在实践中,这个模式对创建DOM元素的函数或者是给元素设定CSS样式的函数会非常实用,因为元素和CSS样式可能会有很多属性,但是大部分属性是可选的。