14

这些片段有什么区别?:

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

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

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

而且,覆盖其他方法有什么不同constructor

4

1 回答 1

26

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

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

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

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

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

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

边注

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

于 2012-04-12T01:20:21.727 回答