当前位置: 首页 > 知识库问答 >
问题:

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

邢骏
2023-03-14

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

共有3个答案

冯通
2023-03-14

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

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;
}

或者,如果您正在创建项目的实例:

/**
 * Returns an instance of the MyConstructor class
 * @returns {Object} MyConstructor instance
 */
function getInstance() {
    return new MyConstructor();
}
萧业
2023-03-14

也许有点晚了,但我很难为今天的提问活动找到合适的答案。

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

class Test {}

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

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

吉玉石
2023-03-14

我认为没有办法使用返回后的括号来记录返回的特定实例。括号中的内容始终被解释为类型。这就是说,有一种方法可以通过记录实例并使用实例链接来记录返回的特定类型实例。我已将问题中的代码缩短为必要的要点,以说明:

/**
 * @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一样好的。

 类似资料:
  • 问题内容: 我有一条记录,想要向其中添加默认构造函数。 但是它创建了带参数的构造函数。 我们如何向记录添加默认构造函数? 问题答案: 为了分裂头发,您永远无法定义默认构造函数,因为在没有定义构造函数的情况下,编译器会生成默认构造函数,因此根据定义,任何定义的构造函数都不是默认构造函数。 如果希望记录具有无参数构造函数,则记录确实允许添加额外的构造函数或工厂方法,只要调用将所有记录字段作为参数的“规

  • 本文向大家介绍Javascript学习笔记之数组的构造函数,包括了Javascript学习笔记之数组的构造函数的使用技巧和注意事项,需要的朋友参考一下 数组的构造函数 由于数组的构造函数在处理参数时的不确定性,因此强烈建议使用 [] 符号来创建一个新数组。 当只有一个参数被传递到数组的构造函数中,并且这个参数还是一个数字时,构造函数将会返回一个元素值为 undefined 的数组,而且这个数组的

  • 我有一个记录,想添加默认构造函数。 但是它创建了带有参数的构造函数。 我们如何将默认构造函数添加到记录中?

  • 本文向大家介绍Javascript学习笔记之函数篇(五) : 构造函数,包括了Javascript学习笔记之函数篇(五) : 构造函数的使用技巧和注意事项,需要的朋友参考一下 Javascript 中的构造函数与其他语言相比也是不同的。任何通过关键字 new 调用的函数都可以当做构造函数。 在构造函数体内,this 指向新创建的对象。如果构造函数体内没有显示的 return 表达式,那么我们就

  • 给定以下代码,如何使用最新的JSDoc正确记录它? 我尝试过这个: 显然这不起作用,JSDoc留档提到的只是如何记录去结构化对象参数,而不是去结构化数组参数。

  • 问题内容: 如果我在构造函数中返回一些值或对象,那么var会得到什么? 在两种情况下都会得到什么n? 其实这是一个测验问题,答案是什么? 自定义对象构造函数返回什么? a)新实例化的对象 b)未定义-构造函数不返回值 c)不论return语句是 d)等于return语句是什么;新实例化的对象(如果没有return语句) 问题答案: 我发现了这个很棒的链接: 上面提到的第二点魔术是构造函数返回特定的