2013-02-14 81 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