2

我正在尝试找出将 jsdoc3 与闭包字典一起使用的 jsdoc 的最佳方法。下面的代码几乎记录了我想要的内容,但是@class标签在文档中添加了一个新关键字,而且我也对使用类定义感到不安,因为它并不是真正的类。

/**
 * myObject constructor. <strong> Do not use with new.</strong>
 * @class myObject
 * @param {string} someText The text to store
 */
function myObject (someText) {  
  var instance = Object.create(myObject.prototype);  
  instance.someText = someText;

  return instance;
}

/**
 * Outputs to the console
 */
myObject.prototype.doSomething = function () {
  console.log(this.someText);
};

var test = myObject('foobar');
test.doSomething();

@namespace最初似乎是一个更好的选择,但它不允许@param在伪构造函数上进行记录或类似操作。任何帮助表示赞赏。

4

2 回答 2

1

这里演示了构造函数/工厂的可能实现,以及如何记录构造对象的成员:

/**
 * Constructs my object.
 *
 * <p>
 * It is not necessary to call this with <i>new</i> keyword.
 *
 * @name myObject
 * @namespace
 * @constructor
 * @param {string} someText The text to store
 */
function myObject ( someText ) {
    var instance = Object.create( myObject.prototype, {
        /**
         * A member, could be a value of any type.
         *
         * @type {string}
         * @memberof myObject#
         */
        anyMember: {
            value: "whatever"
        },
        /**
         * A <strong>method</strong> member.
         *
         * @param {string|number|object|function} anArgument A parameter.
         *
         * @method
         * @memberof myObject#
         */
        aMethodSpecially: {
            value: function ( anArgument ) {
                throw "Not yet implemented";
            }
        }
    } );

    /**
     * Some text.
     *
     * @property {string}
     */
    instance.someText = someText;

    return instance;
}

/**
 * Outputs to the console.
 *
 * @param {number|string|function|object} someArgument Some method argument.
 * @function doSomething
 * @memberof myObject#
 */
myObject.prototype.doSomething = function ( someArgument ) {
    // @ts-ignore
    console.log( this.someText );
};

var test = myObject( 'foobar' );
test.doSomething();

使用 JSDoc 3 生成的文档如下所示: 在此处输入图像描述

--- 截图继续...

在此处输入图像描述

于 2017-06-07T22:41:45.897 回答
-1

您正在尝试做的事情似乎不必要地复杂。如果您想要一个构造/返回特定类型的工厂方法,只需使其明确:

/**
 * myObject factory.
 * @param {string} someText
 * @returns {!myObject} The constructed object.
 */
function createMyObject(someText) {  
  return new myObject(someText);
}

/*
 * @param {string} someText The text to store
 * @constructor
 */
function myObject (someText) {  
  this.someText = someText;
}

/**
 * Outputs to the console
 */
myObject.prototype.doSomething = function () {
  console.log(this.someText);
};

var test = createMyObject('foobar');
test.doSomething();
于 2015-08-16T16:22:28.507 回答