В документации и примерах ExtJS, которые я прочитал, предлагается вызывать методы суперкласса, например:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
MyApp.MyPanel.superclass.initComponent.call(this);
}
});
Я использую этот шаблон довольно долгое время, и основная проблема заключается в том, что при переименовании вашего класса вам также необходимо изменить все вызовы на методы суперкласса. Это довольно неудобно, часто я забуду, а затем мне придется отследить странные ошибки.
Но, читая исходный код Ext.extend()
, я обнаружил, что вместо этого я мог бы использовать методы superclass()
или super()
, которые Ext.extend()
добавляет к прототипу:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
this.superclass().initComponent.call(this);
}
});
В этом коде переименование MyPanel на что-то другое просто - мне просто нужно изменить одну строку.
Но у меня есть сомнения...
-
Я не видел этого документально нигде, и старая мудрость говорит, я не должен полагаться на недокументированное поведение.
-
Я не нашел ни одного использования этих методов
superclass()
иsupr()
в исходном коде ExtJS. Зачем создавать их, когда вы не собираетесь их использовать? -
Возможно, эти методы использовались в некоторой старой версии ExtJS, но теперь устарели? Но, похоже, такая полезная функция, почему вы ее осуждаете?
Итак, следует ли использовать эти методы или нет?