@use JSDoc

語法

@lends <namepath>

概述

@lends 標籤允許您將物件文字的所有成員記錄為具有給定名稱的符號成員。如果您要將物件文字傳遞到從其成員建立命名類別的函式中,您可能需要這麼做。

範例

在此範例中,我們要使用輔助函式來建立名為 Person 的類別,以及名為 initializesay 的執行個體方法。這類似於一些熱門架構處理類別建立的方式。

範例類別
// We want to document this as being a class
var Person = makeClass(
    // We want to document these as being methods
    {
        initialize: function(name) {
            this.name = name;
        },
        say: function(message) {
            return this.name + " says: " + message;
        }
    }
);

如果沒有任何註解,JSDoc 將無法辨識此程式碼建立了一個具有兩個方法的 Person 類別。若要記錄這些方法,我們必須在物件文字正上方的文件註解中使用 @lends 標籤。@lends 標籤會告訴 JSDoc,該物件文字的所有成員名稱都「借用」給名為 Person 的變數。我們還必須為每個方法新增註解。

以下範例更接近我們想要的結果

記錄為靜態方法
/** @class */
var Person = makeClass(
    /** @lends Person */
    {
        /**
         * Create a `Person` instance.
         * @param {string} name - The person's name.
         */
        initialize: function(name) {
            this.name = name;
        },
        /**
         * Say something.
         * @param {string} message - The message to say.
         * @returns {string} The complete message.
         */
        say: function(message) {
            return this.name + " says: " + message;
        }
    }
);

現在,名為 initializesay 的函式將會被記錄,但它們會顯示為 Person 類別的靜態方法。這可能是您的本意,但在此情況下,我們希望 initializesay 屬於 Person 類別的執行個體。因此,我們透過將方法借用給類別的原型來略微變更內容

記錄為執行個體方法
/** @class */
var Person = makeClass(
    /** @lends Person.prototype */
    {
        /**
         * Create a `Person` instance.
         * @param {string} name - The person's name.
         */
        initialize: function(name) {
            this.name = name;
        },
        /**
         * Say something.
         * @param {string} message - The message to say.
         * @returns {string} The complete message.
         */
        say: function(message) {
            return this.name + " says: " + message;
        }
    }
);

最後一個步驟:我們的類別架構使用借用的 initialize 函式來建構 Person 執行個體,但 Person 執行個體沒有自己的 initialize 方法。解決方案是將 @constructs 標籤新增到借用的函式。請記得也要移除 @class 標籤,否則會記錄兩個類別。

記錄為建構函式
var Person = makeClass(
    /** @lends Person.prototype */
    {
        /**
         * Create a `Person` instance.
         * @constructs
         * @param {string} name - The person's name.
         */
        initialize: function(name) {
            this.name = name;
        },
        /**
         * Say something.
         * @param {string} message - The message to say.
         * @returns {string} The complete message.
         */
        say: function(message) {
            return this.name + " says: " + message;
        }
    }
);