在全球范围内
要允许 JSDoc 模板生成您的文档,您必须在函数名称中添加 @function 属性。您的两个函数将出现在模板的全局部分。
jsdoc your-exemple.js
但是,由于您的函数的作用域是匿名函数(但暂时没有模块),因此您确实添加了 @private 函数以告知该函数不是真正的全局函数,而只是在其作用域内可访问。但是,因为默认情况下 JSDoc 生成器模板忽略私有函数,所以添加 --private 选项。
jsdoc your-exemple.js --private
所以你的代码看起来像这样。
(function () {
"use strict";
// ...
/**
* Reduces a sequence of names to initials.
* @function makeInits
* @private
* @param {String} name Space Delimited sequence of names.
* @param {String} sep A period separating the initials.
* @param {String} trail A period ending the initials.
* @param {String} hyph A hypen separating double names.
* @return {String} Properly formatted initials.
*/
function makeInits(name, sep, trail, hyph) {
function splitBySpace(nm) {
return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase();
}
return name.split(hyph).map(splitBySpace).join(hyph) + trail;
}
/**
* Reduces a sequence of names to initials.
* @function makeInitials
* @private
* @param {String} name Space delimited sequence of names.
* @return {String} Properly formatted initials.
*/
function makeInitials(name) {
return makeInits(name, '.', '.', '-');
}
// ...
}());
进入课堂
如果将匿名闭包的内容暴露给变量var Helper,它可能是一个类。因此,您的代码将不是 Global 内容的一部分,而是 Class 的一部分,@class 后跟类名。而且由于您将向类模块提供函数,因此您无需将函数声明为私有。
但您确实解释了您之前的函数是该类的一部分,因此您必须使用 @memberOf 和属性的完整路径。
- 如果是静态成员(通过返回公开),则以
. 结尾。
- 如果是可实例化的方法(通过 this 公开),则以
# 结尾。
- 如果它是一个根本没有公开的私有函数(和
@private),则以~ 结束。
所以
/**
* Helper Class
* @Class Helper
*/
var Helper = (function () {
"use strict";
// ...
/**
* Split by Space
* @function privateExemple
* @private
* @memberOf Helper~
* @return {String} ...
*/
function privateExemple() {
return "";
}
/**
* Reduces a sequence of names to initials.
* @function makeInits
* @memberOf Helper.
* @param {String} name Space Delimited sequence of names.
* @param {String} sep A period separating the initials.
* @param {String} trail A period ending the initials.
* @param {String} hyph A hypen separating double names.
* @return {String} Properly formatted initials.
*/
function makeInits(name, sep, trail, hyph) {
function splitBySpace(nm, sep) {
return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase();
}
return name.split(hyph).map(splitBySpace).join(hyph) + trail;
}
/**
* Reduces a sequence of names to initials.
* @method makeInitials
* @memberOf Helper#
* @param {String} name Space delimited sequence of names.
* @return {String} Properly formatted initials.
*/
this.makeInitials = function makeInitials(name) {
return makeInits(name, '.', '.', '-');
}
// ...
return {
makeInits: makeInits
};
}());
进入 Molule
但是,在您的情况下,您使用exports,这意味着您的文件是一个模块。所以你必须用@module 和名字来描述它。因此,您之前评论的所有内容都将不是 Global 的一部分,而是现在您的模块的一部分。而且因为您将在 Helper 模块后面提供您的函数,所以您无需将函数声明为私有。
/**
* Helper Module
* @module Helper
*/
exports.helper = (function () {
"use strict";
// ...
/**
* Reduces a sequence of names to initials.
* @function makeInits
* @memberOf module:helper.
* @param {String} name Space Delimited sequence of names.
* @param {String} sep A period separating the initials.
* @param {String} trail A period ending the initials.
* @param {String} hyph A hypen separating double names.
* @return {String} Properly formatted initials.
*/
function makeInits(name, sep, trail, hyph) {
function splitBySpace(nm) {
return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase();
}
return name.split(hyph).map(splitBySpace).join(hyph) + trail;
}
/**
* Reduces a sequence of names to initials.
* @function makeInitials
* @private
* @memberOf module:helper~
* @param {String} name Space delimited sequence of names.
* @return {String} Properly formatted initials.
*/
function makeInitials(name) {
return makeInits(name, '.', '.', '-');
}
// ...
return {
makeInitials: makeInitials
};
}());
模块和类
但是,因为您通过var Helper 公开为一个类,通过exports 作为一个模块公开,您可以以两种方式记录。
/**
* Helper Class
* @class Helper
* @memberOf module:helper~
* @see {@link module:helper|Module}
*/
var Helper = (function () {
"use strict";
// ...
/**
* Reduces a sequence of names to initials.
* @function makeInits
* @memberOf module:helper.
* @param {String} name Space Delimited sequence of names.
* @param {String} sep A period separating the initials.
* @param {String} trail A period ending the initials.
* @param {String} hyph A hypen separating double names.
* @return {String} Properly formatted initials.
*/
function makeInits(name, sep, trail, hyph) {
function splitBySpace(nm) {
return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase();
}
return name.split(hyph).map(splitBySpace).join(hyph) + trail;
}
/**
* Reduces a sequence of names to initials.
* @function makeInitials
* @private
* @memberOf module:helper~
* @param {String} name Space delimited sequence of names.
* @return {String} Properly formatted initials.
*/
function makeInitials(name) {
return makeInits(name, '.', '.', '-');
}
// ...
return {
makeInitials: makeInitials
};
}());
/**
* helper Module
* @module helper
*/
exports.helper = Helper;
命名空间或类?
类和命名空间之间的区别只是类通过this 公开一些对象/函数,并且是不可实例化的。如果没有附加任何内容,您可能有一个命名空间,因此只需将 @class 替换为 @namespace,该代码将被放置到适当的命名空间部分。
你还要检查你的 Class 是否不是 Mixin(只是在 Class 上使用,但从不直接使用)或接口(定义但未实现),如果它是其他类的 @extend。
等等
查看文档:http://usejsdoc.org/index.html