語法
@lends <namepath>
概述
@lends
標籤允許您將物件文字的所有成員記錄為具有給定名稱的符號成員。如果您要將物件文字傳遞到從其成員建立命名類別的函式中,您可能需要這麼做。
範例
在此範例中,我們要使用輔助函式來建立名為 Person
的類別,以及名為 initialize
和 say
的執行個體方法。這類似於一些熱門架構處理類別建立的方式。
// 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;
}
}
);
現在,名為 initialize
和 say
的函式將會被記錄,但它們會顯示為 Person
類別的靜態方法。這可能是您的本意,但在此情況下,我們希望 initialize
和 say
屬於 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;
}
}
);