Я работаю над плагинами для goog.editor.Field
и недавно рассмотрел код для пакета goog.editor
. Все плагины расширены от базового класса goog.editor.PluginImpl
, и большую часть времени мы переопределяем некоторые ключевые методы, такие как handleSelectionChange, execCommand. Проблема в том, что goog.editor.Field
получает доступ к своим плагинам через строковое имя, а не прямой доступ. Вот раздел кода для поля. js
var plugin = plugins[i];
if ((plugin.isEnabled(this) ||
goog.editor.PluginImpl.IRREPRESSIBLE_OPS[op]) &&
plugin[goog.editor.PluginImpl.OPCODE[op]].apply(plugin, argList)) {
// Only one plugin is allowed to handle the event. If for some reason
// a plugin wants to handle it and still allow other plugins to handle
// it, it shouldn't return true.
return true;
}
Как вы можете видеть, методы переопределения для плагинов не доступны напрямую, и, следовательно, методы могут быть предназначены для удаления мертвого кода. Любой намек, почему компилятор в расширенном режиме не удалит переопределяющие методы?