Вся документация и примеры 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, но сейчас они устарели? Но это кажется такой полезной функцией, почему вы осуждаете ее?
Так стоит мне использовать эти методы или нет?
this.constructor.superclass.initComponent.call(this);
? - person neonski   schedule 13.11.2009