2

として追加されたプロパティの JSDoc ドキュメントを追加したいと考えていますObject.defineProperty。このようなものがうまくいくと思います:

/** @constructor */                                                         
function MyClass() {                                                        
  /** @property {Number} rnd */                                             
  Object.defineProperty(this, 'rnd', {                                      
    get : function () { return Math.random(); }                             
  });                                                                       
}                                                                           

しかし、生成された JSDoc の説明には、次のプロパティがありません。

$ jsdoc -X test.js
[
    {
        "comment": "/** @constructor */",
        "meta": {
            "range": [ 20, 167 ],
            "filename": "test.js",
            "lineno": 2,
            "path": "/jsdoctest",
            "code": {
                "id": "astnode100000001",
                "name": "MyClass",
                "type": "FunctionDeclaration",
                "paramnames": []
            },
            "vars": { "": null }
        },
        "kind": "class",
        "name": "MyClass",
        "longname": "MyClass",
        "scope": "global"
    },
    {
        "comment": "",
        "meta": {
            "range": [ 116, 159 ],
            "filename": "test.js",
            "lineno": 5,
            "path": "/jsdoctest",
            "code": {
                "id": "astnode100000012",
                "name": "get",
                "type": "FunctionExpression",
                "value": "function"
            }
        },
        "undocumented": true,
        "name": "get",
        "longname": "get",
        "kind": "function",
        "scope": "global"
    },
    {
        "kind": "package",
        "longname": "package:undefined",
        "files": [ "/jsdoctest/test.js" ]
    }
]

この種のプロパティを文書化するための最も適切なアプローチは何ですか? (プラグインかな?)

4

2 に答える 2

12

これはそれを行います:

/** @constructor */
function MyClass() {
  /**
   * @property {Number}
   * @name MyClass#rnd
   */
  Object.defineProperty(this, 'rnd', {
    get : function () { return Math.random(); }
  });
}

私は@property {type} name構文を使用しましたが、クラス内では決して使用しませんでした。私が通常行うことは、次のようなものです。

/** @property {object} */
this.foo = {};

次に、jsdoc を使用this.fooして、名前 ( foo) とそれが属するエンティティを計算します。クラスでの使用@property {type} nameは機能しないようです。

で名前を指定すると@name、どのような名前を付けるか、どこに属しているかがわかります。は#、(静的または内部ではなく) インスタンス変数であることを示します。詳細については、namepath のドキュメントを参照してください。

于 2014-11-13T17:24:53.270 に答える