2011-06-14 67 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成員。