【问题标题】:How can I correctly document instance members added via Object.defineProperties?如何正确记录通过 Object.defineProperties 添加的实例成员?
【发布时间】:2016-09-29 17:32:35
【问题描述】:

我有一个通过Object.defineProperties 定义一些实例属性的类,我很难让JSDoc 3 识别它们属于他们的类。

这是我正在使用的简化版本:

/** @exports mymodule */
function mymodule(exports) {
    /** @constructor
      * @param {String} foo A foo.
      * @param {String} bar A bar.
      * @classdesc Has a foo and a bar.
      */
    function Example(foo, bar) {
        Object.defineProperties(this, {
            /** A foo and a bar
              * @memberof Example
              */
            foobar: { enumerable: false, value: foo + bar, writable: false }
        });
    }

    exports.Example = Example;
}

当我运行 JSDoc 时,我得到了 mymoduleExamplefoobar 的输出,但不是 foobar。如果我删除foobar@memberof 标签,它会注册为全局。我试过@memberof mymmodule~Example,将@lends添加到Object.defineProperties调用和传递给它的对象,并将其转换为Object.defineProperty,但结果没有改变。

我如何将foobar 记录为属于Example

【问题讨论】:

    标签: javascript jsdoc


    【解决方案1】:

    在挖掘了我能找到的每个示例之后,我终于组装了必要的咒语——@memberof 确实是诀窍,但 JSDoc 似乎要求在名称路径中使用的模块必须明确标记为这样。以下工作完美:

    /** A foo and a bar
      *
      * @type String
      * @instance
      * @memberof module:mymodule~Example
      */
    

    【讨论】:

      【解决方案2】:

      您也可以尝试使用@lends 注释代替@memberOf,如下所示:

      Object.defineProperties(this, /** @lends Example# */{
          /** A foo and a bar */
          foobar: { enumerable: false, value: foo + bar, writable: false }
      });
      

      不要忘记类名后面的尖号,告诉jsdoc成员是实例成员而不是静态成员。

      【讨论】:

        【解决方案3】:

        折腾了好几个小时后,我终于让它与@memberOf! 一起工作。注意大写的“O”和砰的“!”

        /**
         * Description
         * @memberOf! MyClass
         * @type {String}
         */
        var myString;
        

        【讨论】:

        • 你能举一个更详细的例子来说明这在代码中的位置吗?我似乎无法让它在任何地方工作。
        • 我最近切换到 JSDuck 已经有一段时间了。取决于您想要实现的目标 - 在我的情况下,此语句必须无处不在,即高于对象的每个变量/属性和函数/方法。
        猜你喜欢
        • 1970-01-01
        • 2019-08-18
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-14
        • 1970-01-01
        相关资源
        最近更新 更多