Возможно ли создать защищенный экземпляр класса суперкласса public в подклассе с использованием аннотации JSDoc? Более конкретно, у меня есть класс, который унаследован от goog.ui.Control. goog.ui.Control имеет защищенный метод setElementInternal. Я хотел бы сделать его модификатор доступа общедоступным в подклассе для доступа к этому методу из другого класса.Google Closure JSDoc Аннотация
ответ
Не напрямую.
Вам нужно будет добавить новый метод в свой класс inherit, который является общедоступным, который вызывает метод @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);
}
Ответ приведен ниже.
"foo.js"
goog.provide ('Foo');
...
goog.inherits (Foo, goog.ui.Control);
...
/** * @param элемент {Элемент} */
foo.prototype.setElementInternalEncap = функция (элемент) {
goog.bind (это. setElementInternal, this, element);
};
"bar.js"
goog.provide ('бар');
goog.require ('foo');
...
fooReference.setElementInternalEncap (элемент);
Это не сработает. 'goog.bind (...)' возвращает функцию, и возвращенная функция не выполняется. Это по существу не-op. Технически вы можете вместо этого заменить свой текущий оператор goog.bind (...) 'следующим образом:' goog.bind (this.setElementInternal, this, element)(); '. Тем не менее, это полностью побеждает цель вызова 'goog.bind() 'для начала. – Technetium
Спасибо за ответ. Авторы Google Closure Library не используют аннотацию \ @public accessor. А именно, если не существует аннотации \ @ public, компилятор рассматривает ее как открытый метод, член и т. Д. Кроме того, я пробовал аннотацию \ @public, но на этот раз компилятор дает следующее предупреждение (ошибка из-за моих параметров компилятора). Переопределение свойства PROTECTED goog.ui.Component.prototype с собственностью PUBLIC. – user2073036
Вы правы в том, что они не требуют @public. Я делаю в своем коде, чтобы прояснить мои намерения. Я удалю его из своего ответа, чтобы сделать стиль кодирования менее отвлекающим. Похоже, вы можете использовать более новую версию компилятора, чем я, которая мешает вам выполнять трюк '@ override'. – Technetium
Лучше избегать использования «@public» полностью, так как это заставляет компилятор выплеснуть кучу предупреждений аннотаций, которые могут загромождать выход сборки, если вы регистрируете его или просматриваете его для ошибок/важной информации. – JoeDuncan