Вся документация ExtJS и примеры, которые я прочитал предлагаем называть методы суперкласса, как это:Лучший способ для вызова метода суперкласса в 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);'? – neonski
Спасибо, но это имеет ту же проблему, что описал Джебе - она работает только для одного уровня иерархии. –