记录中间功能可选参数
Document mid-function optional parameters
是否有适当的语法来记录可选的JavaScript参数,其中可选参数位于函数头的中间(例如jQuery、Gulp等)
我已经用标准的方式记录了这个函数,它运行得很好。问题是,当我试图将第二个参数设置为最后一个变量时(在没有使用可选参数的情况下),我的IDE会感到困惑。
示例:
/**
* @param {number} a_num
* @param {string} [a_str='']
* @param {{}} a_obj
*/
function (a_num, a_str, a_obj) {
if (!a_obj) a_obj = a_str; // doesn't want me to save a string to an object.
a_str = '';
// more stuff
}
如果重要的话,我使用JetBrains的PHPStorm,它(主要)使用谷歌闭包风格的文档。尽管我正在寻找一种更通用的最佳实践方法。
我怀疑我可以做一些丑陋的事情,比如:
/**
* @param {number} a_num
* @param {string|{}} a_str
* @param {{}} [a_obj=null]
*/
但这并没有像我希望的那样准确地描述情况。我希望,由于这已经成为一种常见的结构,有一些东西可以正确地处理它。
在函数的参数列表中间注释可选参数几乎与维护使用这种类型的方法签名的代码一样具有挑战性。
-
Javascript并不真正支持函数参数列表中间的可选参数(为此需要命名参数)。相反,宣传这一点的函数试图根据参数的数量和值来判断调用了哪个版本的函数。
-
Javascript也不支持函数重载。
认识到这些局限性为支持本质上的文档策略提供了第一条线索。注释必须支持所有类型的调用,这样做会在使用强制或检查类型的工具时失去一定的类型安全性。
让我们使用一个jQuery.prototype.bind签名作为示例:
jQuery.prototype.bind( eventType [, eventData ], handler )
为了记录这种方法,我们认识到总是需要两个参数。首先让我们重新排列并重命名参数:
jQuery.prototype.bind( eventType, eventDataOrHandler, [ handler ] )
通过重新排列,JSDoc变得更加清晰:
/**
* @param {string} eventType
* @param {(*|function(Event))} eventDataOrHandler
* @param {function(Event)=} handler
* @return {!jQuery}
*/
jQuery.prototype.bind =
function(eventType, eventDataOrHandler, handler) {};
不幸的是,当使用三个参数时,无法指定需要一组类型,而当使用两个参数时则需要不同的类型。
使用闭包编译器jQuery-extens将为您提供大量示例。
相关文章:
- 带有键代码参数Jquery的模拟按键功能
- 无参数的ES6箭头功能
- 记录中间功能可选参数
- 为什么添加参数时停止功能
- 动态点击,带参数的匿名功能
- 如何在PhantomCSS的屏幕截图功能中使用hideElements参数隐藏多个元素
- 在不设置参数的情况下,此功能如何工作
- 处理所需和可选功能参数的推荐方法
- 我们如何将html元素作为参数传递到handlebaelper中,以实现显示更多/更少的功能
- 角度和控制器功能参数
- 了解功能参数
- 如何使用视图ng-model的不同参数再次运行控制器功能
- 为什么我的功能不重新运行新的参数从新的点击
- onClick包含";的功能参数
- 多个动态创建的按钮,点击使用相同的功能,但采用动态来源的参数
- 添加一个作用域变量作为window的参数.打开功能
- 传递字符串参数给jQuery,它会考虑它的功能
- args.slice(1)如何分离传递给PhantomJS和forEach(function(arg, i)的参数…功能
- 引号需要在谷歌脚本功能参数
- node . js“require"功能和参数