【发布时间】:2017-01-08 09:45:23
【问题描述】:
我有一个大的、结构良好的 JavaScript 对象,它是这样的:
/**
* My 'class' begins here. JSDoc barfs on this.
*/
var MyClass = (function(window, document, $) {
return function(options) {
"use strict";
var
x = 123,
/**
* This is a "public" function.
*/
myFunc = function() { /*...*/ },
/**
* This is some other "private" function.
*/
otherFunc = function() { /*...*/ };
return {
myFunc: myFunc
};
};
})(window, document, window.jQuery);
实际上,最外层闭包用于控制实现模块模式形式的内部闭包所看到的全局范围:内部函数实际上是构造函数,其嵌套函数是有效方法,返回的对象实际上是其中哪些部分是“公开的”的列表。
JSDoc 讨厌这个。
(作为记录,我使用的是 JSDoc 3.4。)
我已经在这段代码的很多地方尝试了 @lend 和 @export 和 @namespace 和 @memberof 的几个变体,但是无论我做什么,JSDoc 都拒绝注意到任何内部函数全部——它不仅仅是“不将它们与正确的事物联系起来;”它根本不将它们包含在任何输出文件中。
这是紧密封装经典 JavaScript 的绝佳模式,不仅封装其内部结构,还封装其依赖项,我们的实际应用程序在数千行代码中使用这种模式。所以我们的 JavaScript 本身不会很快改变结构:只有 cmets 可以合理地改变。
我希望能够使用 JSDoc 来记录这个应用程序,但是无论我给它什么,JSDoc 在这方面都失败了。在 StackOverflow 上四处寻找已经确定了处理各种知名模块系统的方法,但我还没有找到使用多重嵌套闭包的纯简 JavaScript 的可靠答案。
那么有没有人有办法让 JSDoc 正确生成 MyClass 作为“类类”构造,其中深层嵌套的函数作为该“类”的“方法”?我可以将otherFunc 标记为@private 或将其标记为隐藏,或者将myFunc 标记为@public 或将其标记为可见,但无论我尝试什么,JSDoc似乎根本不想记录任何这些嵌套函数。
【问题讨论】:
-
我对JSDoc不是很了解,但是遇到这种情况你可以考虑typedef。
标签: javascript jsdoc jsdoc3