我做了一些测试,我有好消息和坏消息:)。好消息是,您似乎可以通过将@borrows
标签放在 Singleton doc 注释中来使其工作:
/**
* This is the singleton.
*
* @namespace Something.Singleton
* @borrows Something.Singleton-_foo as foo
*/
Something.Singleton = (function() {
// etc
})());
但这有几个后果,好的和坏的:
- 该
foo
功能被标记static
。这可能是一件好事,因为我理解您的代码似乎是准确的。
- 使用当前显示的代码(即单例上没有更多方法等),您可以
@lends
完全省去标签,除非您为了清楚起见想要包含它。如果所有方法都列@borrows
在顶级单例命名空间中,那么您不需要在返回的对象中进一步记录它们。同样,这可能是一件好事。
- 坏消息是,除非明确标记了借用的方法,否则我无法使其工作
@public
- 这使得它在文档中冗余显示。我认为这是不可避免的——如果 jsdoc-toolkit 认为该方法是私有的,它不会创建文档,所以你不能参考它(我明白了WARNING: Can't borrow undocumented Something.Singleton-_foo.
)。如果方法是公开的,它会显示在文档中。
所以这有效:
/**
* This is the singleton.
*
* @namespace Something.Singleton
* @borrows Something.Singleton-_foo as foo
*/
Something.Singleton = (function() {
/**
* @public
* Foo method.
*
* @return {String} this method always returns with <code>bar</code>
*/
function _foo() { return "bar"; }
return {
foo: _foo
};
}());
...因为它复制了_foo
to的文档foo
,但它也会显示_foo
在文档页面中:
Method Summary
<inner> _foo()
<static> Something.Singleton.foo()
可能最好的解决方法是简单地完全忘记在文档注释中@borrows
明确命名_foo
,Something.Singleton.foo
将其标记为公共函数(@public
如果你没有用下划线命名你的内部函数,你可以省略,但这告诉 jsdoc-toolkit 对待除非另有说明,否则它是私有的):
/**
* This is the singleton.
*
* @namespace Something.Singleton
*/
Something.Singleton = (function() {
/**
* @name Something.Singleton#foo
* @public
* @function
* Foo method.
*
* @return {String} this method always returns with <code>bar</code>
*/
function _foo() { return "bar"; }
return {
foo: _foo
};
}());
这将生成您正在寻找的代码文档,并将注释放在与之相关的实际代码旁边。它不能完全满足让计算机完成所有工作的需要——你必须在评论中非常明确——但我认为它和你最初的一样清楚,如果不是更清楚的话,我不知道不要认为它需要更多的维护(即使在您原来的示例中,如果您重命名,您也必须更改所有文档注释Something.Singleton
)。