在ExtJS中,callParent()与initConfig对比超类

时间:2012-04-11 22:48:08

标签: model-view-controller extjs

这些片段之间有什么区别?:

constructor: function(config) {
    this.initConfig(config);
}

constructor: function(config) {
    this.callParent(arguments);
}

constructor: function(config) {
    this.superclass.constructor.call(this, config);
}

AND,如何覆盖除constructor以外的其他方法?

1 个答案:

答案 0 :(得分:26)

第二个和第三个片段在功能上是等效的。 callParent只是一种更简洁的方法来调用父函数而不是通过superclass属性。

第一个例子完全不同。首先,它不会调用父的构造函数。这通常是坏消息。基类通常有一些需要完成的初始化,而忘记为构造函数(和initComponent)调用父类是bug的常见来源。

initConfig是一种方便的方法,它将:

  • 将对象的初始配置与传入
  • 的配置合并
  • 为config
  • 中的所有属性创建getter和setter
  • 将配置应用于对象

这与调用父构造函数完全不同。调用父构造函数的工作完全取决于它编写的内容。有些会使用initConfig,有些则不会,而其他人会使用initConfig执行的类似操作,但需要手动执行。

没有必要使用initConfig,有时甚至是危险的。但这完全是另一个故事(对于Ext 4.1,initConfig看起来有希望无害,并且不包含与4.0相同的危险副作用)

旁注

只是要指出。在第二个和第三个片段中,不需要构造函数。如果你的构造函数只调用父的构造函数,那么你可以完全抛弃你的构造函数。