《JavaScript应用程序设计》一一2.10 参数命名

简介:

本节书摘来华章计算机出版社《JavaScript应用程序设计》一书中的第2章,第2.10节,作者:Eric Elliott 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.10 参数命名

函数被传入的参数数量称为元数 (arity),一般来说函数的元数应该尽可能的精简,但还是避免不了出现极多个元数的调用场景。多元数的问题在于每个参数都必须按照先后顺序被传入,即使个别参数是可选的。要记住这些顺序本身就是一个令人头疼的问题,而且给函数传入无用的参数,对功能本身而言也没有意义。
在下面的示例中,createUser()是一个用于创建用户账户的函数,userProto是用户账户的默认配置,可以用createUser()中传入的参数将之覆盖。

var userProto = {
    name: '',
    email: '',
    alias: '',
    showInSearch: true,
    colorScheme: 'light'
  };

function createUser(name, email, alias, showInSearch, 
  colorScheme) {

  return {
    name: name || userProto.name,
    name: email || userProto.email,
    alias: alias || userProto.alias,
    showInSearch: showInSearch,
    colorScheme: colorScheme || userProto.colorScheme
  };
}

test('User account creation', function () {
  var newUser = createUser('Tonya', '', '', '', 'dark');

  equal(newUser.colorScheme, 'dark',
    'colorScheme stored correctly.');
});

在上述示例中,createUser()函数拥有5个可选参数,而UserProto是一个原型对象,这里存在一个问题,先看函数调用:
var newUser = createUser('Tonya', '', '', '', 'dark');
首先,如果不了解createUser()函数的具体实现,很难知晓每个参数的具体含义。其次,若想设置最后一位参数的值,必须将前面4位参数全部补全。再者,如果这个函数被其他模块依赖,那么后期对其所进行参数调整的成本非常昂贵。
正确的参数传入方式是:

var newUser = createUser({
  name: 'Mike',
  showInSearch: false
});

你可以使用extend()方法来处理这类参数的传入,市面上大部分JavaScript类库中都拥有类似的方法(包括jQuery与Underscore),来看看使用jQuery的版本:

function createUser(options) {
  return $.extend({}, userProto, options);
}

$.extend()将对象作为参数传入,所传入的第一个参数是需要进行扩展的对象。在这个例子中,我们需要在不改变userProto或options值的前提下,创建用户账户对象,所有对象的方法与属性都是通过扩展而来,这是一种简单且优雅的代码复用方式。

相关文章
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
343 63
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
135 4
JavaScript基础知识-函数的参数
|
JavaScript 前端开发
JavaScript 函数参数
JavaScript 函数参数
110 3
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
376 0
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
153 1
|
JavaScript 前端开发
JavaScript变量命名规则及关键字详解
JavaScript变量命名规则及关键字详解
298 1
|
JavaScript
JS获取浏览器地址栏的多个参数值的任意值
JS获取浏览器地址栏的多个参数值的任意值
301 3
|
JavaScript 前端开发
JavaScript的命名规则
JavaScript的命名规则
422 0
|
JavaScript 前端开发
js中的命名规则
js中的命名规则