简体   繁体   English

如何使用jsdoc注释工厂类使用的自定义对象

[英]How to comment a custom object used by a factory class with jsdoc

I have a custom object g3.hybrid that a factory function g3.Class will use it as the parent to produce custom classes. 我有一个自定义对象g3.hybrid ,工厂函数g3.Class会将其用作生成自定义类的父对象。

My problem is that I can't make JSDoc to recognize what my functions/properties are going to be after this object fills the factory function. 我的问题是,在此对象填充工厂函数后,我无法使JSDoc识别我的函数/属性。

Here is my custom object: 这是我的自定义对象:

/**
 * @class g3.hybrid
 * @classdesc
 * A supplementary object used as parent for the class construction helper class 
 * (see {@link g3.Class}).
 * bla-bla-bla
 */
g3.hybrid = function(myClass){ //<-No, this is NOT constructor!
  return {
    /**
     * @lends g3.hybrid.
     */
    STATIC: { //<-It's members WILL become static props!
       /**
        * @static
        * @prop {Object} defaults Accessed as: g3[myClass].defaults
        * @prop {string} defaults.name Name of stored object, should provide your own names
        */
       defaults: {
          name: 'g3hybrid'
       }
    },
    /**
     * @lends g3.hybrid.prototype
     */
    prototype: { //<- It's members WILL become prototype members!
       /**
        * @public
        * @function g3.hybrid.prototype.addLibrary
        * It is called always implicitly from a library plugin of "g3[myClass]".
        * bla-bla-bla
        * @param {String} name A name of the library that each object stores in 
        * instance property libraries.
        * @param {String} lib A reference of an object from a library.
        * @return {} Undefined.
        */
       addLibrary: function(name, lib){
       }
    },

      /**
       * @public
       * @constructs g3.hybrid
       * @function g3.hybrid.constructor
       * 
       * The constructor function of "g3[myClass]".
       * You should pass an object argument or it throws an error.
       * bla-bla-bla
       * @param {Object} options Object that contains as members "name" for the 
       * instance's name and default values that will overwrite static default 
       * members.
       * @return {Object} An object of class g3[myClass].
       */
      constructor: function(options){ //<- This IS the constructor!

      }
   };
}

Then at project's root I type cent@cent:~/plugins$ jsdoc -c ~/node/jsdoc/conf-1.json ./js/g3hybrid-1.js -d out-plugins where conf-1.json is my conf file at the node folder which is installed locally for this user. 然后在项目的根目录下输入cent@cent:~/plugins$ jsdoc -c ~/node/jsdoc/conf-1.json ./js/g3hybrid-1.js -d out-plugins其中conf-1.json是我的此用户本地安装的node文件夹中的conf文件。

The modified config file is as follows: 修改后的配置文件如下:

{
    "plugins": [],
    "recurseDepth": 10,
    "source": {
        "include": [ /* array of paths to files to generate documentation for */ ],
        "exclude": [ /* array of paths to exclude */ ],
        "includePattern": ".+\\.js(doc|x)?$",
        "excludePattern": "(^|\\/|\\\\)_"
    },
    "sourceType": "module",
    "plugins": [
        "plugins/markdown",
        "plugins/summarize"
    ],
    "tags": {
        "allowUnknownTags": true,
        "dictionaries": ["jsdoc","closure"]
    },
    "templates": {
        "cleverLinks": false,
        "monospaceLinks": false
    }
}

The result looks like this: 结果看起来像这样: 在此处输入图片说明

The whole method description becomes a link on the right panel 整个方法说明成为右侧面板上的链接 在此处输入图片说明

and the helper function function(myClass) is marked as the constructor! 并将辅助函数function(myClass)标记为构造函数!

cent@cent:~/plugins$ jsdoc -v
JSDoc 3.5.5 (Thu, 14 Sep 2017 02:51:54 GMT)
cent@cent:~/plugins$ node -v
v7.1.0

Any ideas that I can use to make it pretty? 我有什么想法可以使它变得漂亮吗?

Ok, I found an answer but if someone has a better idea I really want to hear it. 好的,我找到了答案,但是如果有人有更好的主意,我真的很想听听。 I decided to comment it from the point of view of the machine or, what actually is and not what it will become after feeding it to the class factory. 我决定从机器的角度对其进行评论,或者说是实际的东西,而不是将其提供给班级工厂后的样子。

So, we have an object g3.hybrid and we comment it as such. 因此,我们有一个对象g3.hybrid并以此进行注释。 I also wanted to have, if possible, one page for all this code as I discovered that jsdoc creates sub-pages for objects that contain other objects making the documentation unreadable to the end user. 我还希望为所有这些代码提供一个页面,因为我发现jsdoc为包含其他对象的对象创建了子页面,使最终用户无法阅读文档。

As, the class factory uses such objects as mixins (almost) I decided to declare the root page as @mixin , I could have used @object -if someone tested please give some feedback here... 因为,类工厂使用混合对象之类的对象(几乎),我决定将根页面声明为@mixin ,我本可以使用@object @mixin如果有人测试过,请在此处提供一些反馈...

Moreover, I wanted the reader to move his attention away from word STATIC and focus to it's members as these will become the real static members by the class factory; 此外,我希望读者将注意力从“ STATIC一词转移到它的成员上,因为它们将由班级工厂变成真正的静态成员。 to state it differently I wanted to manipulate what jsdoc is commenting and what not so that the reader stays on what has meaning only . 换种说法,我想操纵jsdoc注释的内容和不注释的内容,以便读者留在仅具有意义的内容上

As such, a viable commenting could be: 因此,可行的评论可能是:

/**
 * @desc 
 * A supplementary object used as parent for the class construction helper class 
 * (see {@link g3.Class}).
 * 
 * bla-bla-bla
 * 
 * @mixin g3.hybrid
 */
g3.hybrid = function(myClass){ //<-No, this is NOT constructor!
   /*
    * Avoid to give jsdoc comments here as it will create a new page!
    */
   return {
      /*
       * Avoid to give jsdoc comments here as it will create a new page!
       */
      STATIC: { //<-It's members WILL become static props!
         /**
          * @summary g3.hybrid.STATIC.defaults
          * ----------------------------------
          * @desc 
          * Accessed as: g3[myClass].defaults.
          * @var {object} defaults
          * @memberof g3.hybrid
          * @prop {string} name Name of stored object, should provide your own names
          */
         defaults: {
            name: 'g3hybrid'
         }
      },

      /*
       * Avoid to give jsdoc comments here as it will create a new page!
       */
      prototype: { //<- It's members WILL become prototype members!
         /**
          * @summary 
          * g3.hybrid.prototype.addLibrary
          * ------------------------------
          * @desc 
          * It is called always implicitly from a library plugin of "g3[myClass]".
          * 
          * bla-bla-bla
          * 
          * @function g3.hybrid~addLibrary
          * @param {String} name A name of the library that each object stores in 
          * instance property libraries.
          * @param {String} lib A reference of an object from a library.
          * @return undefined
          */
         addLibrary: function(name, lib){
         }
      },

      /**
       * @summary 
       * g3.hybrid.constructor
       * ---------------------
       * @desc 
       * The constructor function of "g3[myClass]".
       * 
       * You should pass an object argument or it throws an error.
       * 
       * bla-bla-bla
       * 
       * @function g3.hybrid.constructor
       * @param {object} options Object that contains as members "name" for the 
       * instance's name and default values that will overwrite static default 
       * members.
       * @return {object} An object of class g3[myClass].
       */
      constructor: function(options){ //<- This IS the constructor!

      }
   };
}

There is enough space for my own comments and it's not big different from my initial commenting. 我有足够的空间来发表自己的评论,与我最初发表的评论没有太大区别。 It's also self-explanatory. 这也是不言自明的。

The result: 结果:

在此处输入图片说明

and the menu for this single file has just one link hybrid :)) 并且此单个文件的菜单只有一个hybrid链接:))

在此处输入图片说明

Tags I used: @mixin , @var , @memberof , @prop , @function , @param , @return , @summary and @desc . 标签我用: @mixin@var@memberof@prop@function@param@return@summary@desc

I also avoided to clutter my code with more tags and I used the namespace of the different identifiers like g3.hybrid.constructor that replaces @static or g3.hybrid~addLibrary that repaces @inner . 我也避免了杂波我的代码以更多的标签,我用不同的标识符的命名空间一样g3.hybrid.constructor替换@staticg3.hybrid~addLibrary是repaces @inner

Of course there might exist better approaches out there!? 当然可能存在更好的方法!?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM