使用jsdoc记录JavaScript构造函数的返回

xxslljrj  于 2023-03-21  发布在  Java
关注(0)|答案(4)|浏览(180)

我有一个返回构造函数的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();
rqqzpn5f

rqqzpn5f1#

我不认为有一种方法可以使用@returns后面的方括号来记录返回一个 specific 示例。方括号中的内容总是被解释为 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中最好的。

mnowg1ta

mnowg1ta2#

也许有点晚,但我有问题,以找到适当的答案为您的问题活动今天。
当我尝试在WebStorm上自动生成JSDoc时,得到的结果如下:

class Test {}

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

返回类型定义仍然很奇怪,但构造函数注解可能会满足这个目的。

4xrmg8kj

4xrmg8kj3#

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

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();
}
du7egjpx

du7egjpx4#

您可以用途:

@returns {new () => MyConstructor}

这将返回对象转换为创建MyConstructor类型的匿名构造函数。
你可以很灵活地将它与&结合起来,以塑造构造函数的外观(如果你有想要访问的静态方法)以及构造函数创建的内容(如果你有要放在工厂中的部分)

相关问题