在 ExtJS 中,callParent() 与 initConfig 与 superclass



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

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

而且,覆盖除constructor以外的其他方法有何不同?

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

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

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

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

这与调用父构造函数完全不同。调用父构造函数的作用完全取决于编写它要做什么。有些人会使用 initConfig ,有些人不会,有些人会做类似 initConfig 做的事情,但要手动。

没有必要

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

旁注

只是要指出。在第二个和第三个代码段中,不需要构造函数。如果您的构造函数只调用父构造函数,则可以完全省略构造函数。

最新更新