5

我有一个返回构造函数的 javascript 函数(参见下面的代码示例)。我将如何使用 jsdoc 的 @returns 标记来记录这一点。执行 @returns {MyConstructor} 似乎不正确,因为这意味着我正在返回“MyConstructor”的实例而不是构造函数本身,对吗?

function MyConstructor() {
    var self = this;

    self.myFunction = function() {
        return true;
    };

    self.getMyFunctionResult = function() {
        return self.myFunction();
    };
}

/**
 * @returns {?} A constructor that will be instantiated
 */
function getConstructor() {
    return MyConstructor;
}

var constructor = getConstructor();
var instance = new constructor();
4

3 回答 3

3

我认为没有办法在@returns记录返回特定实例之后使用括号。括号中的内容总是被解释为type。话虽这么说,有一种方法可以记录正在返回的类型的特定实例,方法是记录实例并使用指向该实例的链接。我已将问题中的代码缩短为必要的说明:

/**
 * @class
 */
function MyConstructor() {

}

/**
 * @returns {Function} A constructor that will be instantiated. Always
 * returns {@link MyConstructor}.
 */
function getConstructor() {
    return MyConstructor;
}

除了类之外,它也可以用其他东西来完成:

/**
 * @public
 */
var foo = 1;

/**
 * @returns {number} {@link foo}.
 */
function getFoo(){
    return foo;
}

据我所知,这与 jsdoc 3 一样好。

于 2014-01-09T13:34:51.783 回答
3

也许有点晚了,但我今天很难为你的问题找到正确的答案。

当我尝试在 WebStorm 上自动生成 JSDoc 时,我得到的是:

class Test {}

/**
 *
 * @return {Test}
 * @constructor
 */
function getTestConstructor() {
    return Test;
}

返回类型定义仍然很奇怪,但构造函数注释可能会达到目的。

于 2019-04-08T12:39:33.757 回答
2

您可以使用以下方法检查函数返回的类型:

console.log(typeof constructor, typeof instance); // function object

在文档中它说:

/**
 * Returns the sum of a and b
 * @param {Number} a
 * @param {Number} b
 * @returns {Number} Sum of a and b
 */
function sum(a, b) {
    return a + b;
}

http://usejsdoc.org/tags-returns.html

因此,在您的示例中,它将是:

/**
 * Returns the MyConstructor class
 * @returns {Function} MyConstructor class
 */
function getConstructor() {
    return MyConstructor;
}

或者,如果您正在创建一个 Item 的实例:

/**
 * Returns an instance of the MyConstructor class
 * @returns {Object} MyConstructor instance
 */
function getInstance() {
    return new MyConstructor();
}
于 2014-01-08T18:02:21.897 回答