gpt4 book ai didi

javascript - 在 ExtJS 中调用父类(super class)方法的更好方法

转载 作者:IT王子 更新时间:2023-10-29 03:21:47 24 4
gpt4 key购买 nike

我读过的所有 ExtJS 文档和示例都建议像这样调用父类(super class)方法:

MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
MyApp.MyPanel.superclass.initComponent.call(this);
}
});

我使用这种模式已经有一段时间了,主要问题是,当你重命名你的类时,你还必须更改对父类(super class)方法的所有调用。这很不方便,我经常会忘记,然后我不得不追查奇怪的错误。

但是阅读 Ext.extend() 的源代码我发现,我可以使用 superclass()super() Ext.extend() 添加到原型(prototype)的方法:

MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
this.superclass().initComponent.call(this);
}
});

在此代码中,将 MyPanel 重命名为其他名称很简单 - 我只需更改一行。

但我有疑问...

  • 我在任何地方都没有看到这种记录,古老的智慧说,我不应该依赖未记录的行为。

  • 我没有发现在 ExtJS 源代码中单独使用这些 superclass()supr() 方法。为什么在不打算使用它们时创建它们?

  • 也许这些方法在某些旧版本的 ExtJS 中使用过,但现在已弃用?但它看起来很有用,为什么要弃用它?

那么,我到底该不该使用这些方法呢?

最佳答案

我认为这在 ExtJS 4 中用 callParent 解决了。

Ext.define('My.own.A', {
constructor: function(test) {
alert(test);
}
});

Ext.define('My.own.B', {
extend: 'My.own.A',

constructor: function(test) {
alert(test);

this.callParent([test + 1]);
}
});

关于javascript - 在 ExtJS 中调用父类(super class)方法的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1721935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com