2013-02-14 130 views
0

是否有可能使用JSDoc註釋在子類中公開超類的保護實例方法?更具體地說,我有一個從goog.ui.Control繼承的類。 goog.ui.Control有一個受保護的方法setElementInternal。我想在其子類中公開其訪問修飾符,以從另一個類訪問此方法。谷歌關閉JSDoc註釋

回答

0

不是直接。

您需要在繼承類中添加一個新的方法,該方法是公開的,它調用@protected方法。像這樣的東西應該工作。

/** 
* My public wrapper around a protected method 
* @param {Element} element Root element for this component 
*/ 
my.namespace.Control.prototype.setElement = function(element) { 
    this.setElementInternal(element); 
} 
+1

感謝您的回答。 Google Closure庫作者不使用\ @public訪問者註釋。也就是說,如果沒有@ @public註解,編譯器會將它視爲公共方法,成員等。另外,我嘗試了@ @public註解,但是這次編譯器給出了以下警告(由於我的編譯器選項而導致錯誤)重寫PROTECTED屬性具有PUBLIC屬性的goog.ui.Component.prototype。 – user2073036 2013-02-14 23:05:47

+0

你是對的,他們不需要@public。我用我自己的代碼來闡明我的意圖。我會將其從我的答案中刪除,以使我的編碼風格更加分散注意力。這聽起來像你可能會使用比我更新版本的編譯器,這會阻止你執行'@ override'技巧。 – Technetium 2013-02-15 01:14:44

+0

最好避免完全使用「@public」,因爲它會讓編譯器吐出一堆註釋警告,如果您記錄日誌或編寫錯誤/重要信息,這些警告可能會混亂構建輸出。 – JoeDuncan 2013-02-19 18:45:45

0

答案如下所示。

「foo.js」

goog.provide( '富');

...

goog.inherits(FOO,goog.ui.Control);

...

/** * @參數{元素}元件 */

foo.prototype.setElementInternalEncap =函數(元件){

goog.bind(此。 setElementInternal,this,element);

};

「bar.js」

goog.provide( '巴');

goog.require('foo');

...

fooReference.setElementInternalEncap(元件);

+0

這不起作用。 'goog.bind(...)'返回一個函數,並且返回的函數沒有被執行。這實質上是一個無操作。從技術上講,你可以用這個替換你現有的'goog.bind(...)'語句:'goog.bind(this.setElementInternal,this,element)();'。但是,這完全違背了調用goog的目的。bind()'開頭。 – Technetium 2013-02-19 22:01:20