配置对象通常用在API库的实现中,当程序中需要编写要多次的模块,也可以采用这种模式。这种模式的好处是接口明确,扩展方便。比如,一个 addPerson在设计的最初需要两个参数作为初始化时人的姓名:
function addPerson(first, last) {...}
随着程序的进一步扩展,这个函数需要的参数变多了:
function addPerson(first, last, dob, gender, address) {...}
这样,函数在执行时就需要按次序传入这些参数:
addPerson("Bruce", "Wayne", new Date(), null, null, "batman");
这并不太方便,而且也不直观:从调用函数的代码上看,那两个null不知道是用在哪个参数上的。如果可以只传一个配置对象作为参数:
addPerson(conf);
并在传参之前把配置对象设置好相应的值:
var conf = {
username: "batman",
first: "Bruce",
last: "Wayne"
};
addPerson(conf);
那我们就得到以下的好处:
- 调用函数时不需要记得参数的次序
- 随意地忽略那么不想传递的参数
- 读写代码都更方便
- API的实现可以方便更改
坏处是,现在调用addPerson就得记住它的参数名,而且这些参数的名字在JS代码minify的时候不会缩小。