通常的继承都是在一个已经存在的类上面定义特殊的方法。从而产生一个更加强大的类。就更自然界的演变一样,新的物种通常会有比祖先更加强大的适应生存能力。然而,初次查看Ext api时,对Ext.extend方法有点误解。
如果我们定义一个类Father的子类Child时,在java中通常只是使用class Child extends Father{/*子类成员和方法*/},然而在Ext中,似乎没这么简单。看api似乎要这么写
Ext.extend(Child,Father)。这里有个疑问,就是通常我想在定义子类就把扩展的属性和方法都写上。可是这个方法似乎要在继承之前先定义Child。仔细查询了一下,其实extend方法2个参数的调用方法可以完成我的要求。就是说,extend方法接收2个参数时,它将认为这是后两个参数。api如下:
extend( Function subclass
, Function superclass
, [Object overrides
] ) :
如果你传递2个参数,比如像下面:
child = Ext.extend(Father,{
constructor: function(config) {
// Your preprocessing here
MyGridPanel.superclass.constructor.apply(this, arguments);
// Your postprocessing here
},
yourMethod: function() {
// etc.
}
}).
那么,Father参数会被解释成父类。后面的一个对象将被解释成子类的定义。这里需要注意的是方法construcor,如果你不定义这个方法的话,extend方法将返回父类的constructor方法。这里可能就是Father的构造方法。