5

我对 jsdoc 评论有点陌生(试图将一些 vsdoc 评论转换为 jsdoc,以便我可以使用支持 jsdoc 的文档生成器),所以如果我做的事情明显不正确,请阻止我,但我注意到如果你分配构造函数原型上的方法,智能感知适用于该成员:

/** 
 * @constructor 
 * @this {Foo} 
 */ 
function Foo() {}

/** 
 * A bar of Foo for you.
 * @param {string} baz A foo bar baz. 
 * @return {string} You get back what you give. 
 */ 
Foo.prototype.bar = function(baz) { return baz; }

但是,如果您在构造函数中指定 bar,则 bar 方法上的智能感知会中断 - 它只会将整个注释、jsdoc 标记和所有内容显示为单个块。它不显示参数类型或通过以下方式传递返回值:

/** 
 * @constructor 
 * @this {Foo} 
 * @param {string} baz A foo bar baz. 
 */ 
function Foo(baz) { 
  /** 
   * A bar of Foo and something else too.
   * @param {string} barzipan A little something extra. 
   * @return {string} You get back what you gave, and then some. 
   */ 
  this.bar = function(barzipan) { return baz + barzipan; }; 
}

vsdoc intellisense 解析器能够处理原型上的方法或分配给 this 的方法,但是 jsdoc 解析器似乎被构造函数中分配给 this 的方法弄糊涂了。

4

1 回答 1

1

要处理这个问题,您需要在 jsdoc 值中添加更多的语法糖。这是因为解析器不知道将“this.bar()”翻译成“Foo.bar()”。要解决它,请添加以下内容:

/** 
 * @constructor 
 * @this {Foo} 
 * @param {string} baz A foo bar baz. 
 */ 
function Foo(baz) { 
  /** 
   * A bar of Foo and something else too.
   * @param {string} barzipan A little something extra. 
   * @return {string} You get back what you gave, and then some. 
   * @function bar
   * @memberof {@link Foo}
   */ 
  this.bar = function(barzipan) { return baz + barzipan; }; 
}

请参阅JSDoc @memberofJSDOC @function。当您想要创建私有函数时,这也可以为您提供帮助(要记录私有函数,请在运行 JSDOC 时使用 -p 命令)。

function Foo(baz) {
    /**
     * Returns what Bob did...
     * @param {string} doStuff Stuff to pass in.
     * @function bob
     * @memberof Foo
     * @private
     */
    var bob = function(doStuff) {
         return "Bob did " + doStuff;
    }
}
于 2016-10-05T12:11:59.067 回答