2012-09-17 11 views
5

Ho una classe che definisce alcune proprietà di istanza tramite Object.defineProperties e sto riscontrando grandi difficoltà nel ricevere JSDoc 3 per riconoscere che appartengono alla loro classe.Come posso documentare correttamente i membri dell'istanza aggiunti tramite Object.defineProperties?

Ecco una versione semplificata di quello che sto lavorando con:

/** @exports mymodule */ 
function mymodule(exports) { 
    /** @constructor 
     * @param {String} foo A foo. 
     * @param {String} bar A bar. 
     * @classdesc Has a foo and a bar. 
     */ 
    function Example(foo, bar) { 
     Object.defineProperties(this, { 
      /** A foo and a bar 
       * @memberof Example 
       */ 
      foobar: { enumerable: false, value: foo + bar, writable: false } 
     }); 
    } 

    exports.Example = Example; 
} 

Quando eseguo JSDoc, ottengo output per mymodule, Example, foo, e bar, ma non foobar. Se rimuovo il tag @memberof per foobar, viene registrato come globale. Ho provato @memberof mymmodule~Example, aggiungendo @lends sia alla chiamata Object.defineProperties sia all'oggetto passato e convertendola in Object.defineProperty, ma i risultati non cambiano.

Come è possibile documentare foobar come appartenente a Example?

risposta

8

Dopo aver esplorato ogni esempio che ho trovato, ho finalmente assemblato la formula magica necessaria - @memberof è davvero il trucco, ma JSDoc sembra richiedere che i moduli utilizzati nei namepath siano esplicitamente contrassegnati come tali. Di seguito ha funzionato perfettamente:

/** A foo and a bar 
    * 
    * @type String 
    * @instance 
    * @memberof module:mymodule~Example 
    */ 
+2

provato con webstorm, più file: S non funziona ... – inf3rno

0

Dopo armeggiare intorno per molte ore, ho finalmente ottenuto di lavorare con @memberOf!. Nota la "O" maiuscola e il botto "!"

/** 
* Description 
* @memberOf! MyClass 
* @type {String} 
*/ 
var myString; 
+1

Puoi dare un esempio più dettagliato di dove questo va nel codice? Non riesco a farlo funzionare ovunque. –

+1

Recentemente sono passato a JSDuck ed è passato un po 'di tempo. A seconda di ciò che si vuole ottenere - nel mio caso questa affermazione doveva essere ovunque, cioè sopra ogni variabile/proprietà e funzione/metodo di un oggetto. – auco

0

Si potrebbe anche provare l'annotazione @lends al posto di @memberOf come questo:

Object.defineProperties(this, /** @lends Example# */{ 
    /** A foo and a bar */ 
    foobar: { enumerable: false, value: foo + bar, writable: false } 
}); 

Non dimenticare il simbolo tagliente dopo il nome della classe per raccontare membri jsdoc sono membri di istanza e non membri statici.

Problemi correlati