Документирование класса javascript с прототипами в пространстве имен с помощью jsdoc-toolkit

Я очень стараюсь записать код в формате ниже с помощью jsdoc-toolkit. Мне кажется, что теги, которые я использовал, должны давать желаемый результат, но это не так. Вместо этого он предупреждает, что класс недокументирован (потому что он определен только внутри закрытия) и не включает класс в список членов пространства имен.

Я хотел бы документировать это, не прибегая к использованию тега @name, если это возможно. Может ли кто-нибудь помочь?

/**
 * @namespace The original namespace
 */
var namespace = function () {
    // private
    /**
     * @private
     */
    function _privateMethod () {

    };

    /**
     * This is the detail about the constructor
     * @class This is the detail about the class
     * @param {Object} argone The first argument
     * @param {Object} argtwo The second argument
     */
    var Class = function (argone, argtwo) {
        /**
         * A public member variable
         */
        this.member = "a member";
    };

    /**
     * A public method
     * @param {Object} argone The first argument
     */
    Class.prototype.publicMethod = function (argone) {

    };

    return /** @lends namespace */ {
        Class: Class
    }
}();

Ответ 1

Я попробовал кучу разных вещей, и это было лучшее, что я мог придумать.

Первая часть... документация publicMethod на Class. Сначала сделайте Class a memberOf namespace, а затем используйте @lends на Class.prototype. Пример:

/**
 * @namespace The original namespace
 */
var namespace = function () {
    // private
    /**
     * @private
     */
    function _privateMethod () {

    };

    /**
     * This is the detail about the constructor
     * @class This is the detail about the class
     * @memberOf namespace
     * @param {Object} argone The first argument
     * @param {Object} argtwo The second argument
     */
    var Class = function (argone, argtwo) {
        /**
         * A public member variable
         */
        this.member = "a member";
    };

    Class.prototype = 
    /** @lends namespace.Class */ 
    {
        /** a public method
          * @param {Object} argone The first argument
        */
        publicMethod: function (argone) {

        }
    };

    return {
        Class: Class
    }
}();

Теперь вторая часть... получив Class, чтобы отобразиться как на namespace. Я не уверен, как это сделать... извините! Он будет отображаться как namespace.Class в индексе класса.

Ответ 2

Как подсказка: jsdoc 2 полна ошибок и плохих практик.
Попробуйте JSDOC3 → https://github.com/jsdoc3/jsdoc или вообще не jsdoc в зависимости от характера проекта.