2011-06-14 84 views
4

我希望我的代码,如下所示,可以生成描述JSDoc(v2.4.0)的对象文本的每个属性的文档,但它不起作用。有谁知道如何使用JSDoc从使用getter/setter的代码生成文档?JSDoc和JavaScript属性获取器和设置器

/** Enum of days of week. */ 
var Day = { 
    /** Sunday. */ 
    get Sun() { return 0; }, 
    /** Monday. */ 
    get Mon() { return 1; }, 
    /** Thuesday. */ 
    get Tue() { return 2; }, 
    /** Wednesday. */ 
    get Wed() { return 3; }, 
    /** Thursday. */ 
    get Thu() { return 4; }, 
    /** Friday. */ 
    get Fri() { return 5; }, 
    /** Saturday. */ 
    get Sat() { return 6; } 
} 

回答

2

您可以使用jQuery风格的getter/setter方法:

/** 
* Get colour of object 
* @returns {mixed} 
*//** 
* Set colour of object 
* @param {mixed} val 
* @returns {this} 
*/ 
colour: function(val) { 
    if (val === undefined) 
     return this.colour; 
    else { 
     this.colour = val; 
     return this; 
    } 
} 

我刚刚与迈克尔本人讨论这个非常问题。由于非常酷的功能,jsDoc3(https://github.com/micmath/jsdoc)是可能的。它可以堆叠多个文档块(一个getter和一个setter方法):

http://groups.google.com/group/jsdoc-users/browse_thread/thread/d4c7794bc8f6648e/94df7339e1fc4c91#94df7339e1fc4c91

+2

语法演示了ES5语法,它现在是完全标准的,并且不是所有实现特定的。至于get/set不是关键字,在这里查看它们的正确方法是它们是* contextual *关键字。如果'get'后面的标记是冒号,则它是一个数据属性。如果'get'后面的标记是名称,则它是一个访问器属性。 (当然,'set'也一样。) – 2011-12-01 08:49:58

+0

@Jeff这是一个有趣的笔记。我玩过一段游戏,这个语法在ie9,ff3.5,chrome15和node中似乎很好用,但显然不在老版本的IE中。我已经阅读过有关ES5'defineProperty'(可在IE8 +中使用)的内容,但我没有遇到ES5规范中的对象字面语法。我稍微更新了我的答案。 – 2011-12-01 13:33:05

+0

@Jeff作为一个侧面问题,你知道是否有可能定义一个在IE6-IE7中提供最基本的getter/setter功能的嵌入式Object.defineProperty函数? – 2011-12-01 13:40:38

4

使用@type记录的JavaScript getset存取。像下面的内容应与JSDoc工作:

/** 
    * Sunday. 
    * @type {number} 
    */ 
    get "Sun"() { return 0; }, 
    /** 
    * Monday. 
    * @type {number} 
    */ 
    get "Mon"() { return 1; }, 

此文档每个属性如利用类型的number成员。