我阅读过的所有ExtJS文档和示例都建议像这样调用超类方法:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
MyApp.MyPanel.superclass.initComponent.call(this);
}
});
我使用这个模式已经有一段时间了,主要问题是当你重命名你的类时,你也必须改变所有调用父类方法的地方。这非常不方便,经常会忘记,然后我就不得不追踪奇怪的错误。
但是在阅读 Ext.extend()
的源代码时,我发现可以使用 Ext.extend()
添加到原型中的 superclass()
或 super()
方法来解决这个问题:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
this.superclass().initComponent.call(this);
}
});
在这段代码中,将MyPanel重命名为其他名称很简单 - 我只需要改变一行代码。
但我有疑虑...
我没有看到这里有任何文档说明,老的智慧说,我不应该依赖于未经文件化的行为。
我在ExtJS源代码中没有找到这些
superclass()
和supr()
方法的使用。如果你不打算使用它们,为什么要创建它们?也许这些方法在某个旧版本的ExtJS中被使用过,但现在已弃用了?但它似乎是一个非常有用的功能,为什么会弃用呢?
那么,我应该使用这些方法吗?
this.constructor.superclass.initComponent.call(this);
? - neonski