日期:2014-05-16  浏览次数:20368 次

ExtJS继承无法覆盖父类方法的问题

对于继承,刚刚实然想明白了一个问题,想明白了,觉得自己有点搞笑了。在开发的时候,有时要用到这个dom对象的父对象,我之前一直是用 dom的 parent的想法来想ExtJS,所以在查找它的API的时候,总是在想,为什么它的API里没有提供getParent 这样类似的方法呢,刚刚实然想通了,ExtJS是通过extend来作继承的,就如同Java中的extends,那就完全不需要getParnet这样的方法了,子类已经完全有了父类的方法与属性了,还要parent作什么呢。

在某本书里看到,ExtJS的继承方式有两种写法:

一种是:

classsB = function(config) {
??? classB.superclass.constructor.call(this,config);
};

Ext.extend(classB, classA );

还有一种是:

Ext.extend(classB,classA,{

constructor:function(config){

classB.superclass.constructor.call(this,config);

}

});

就我在开发中遇到的问题来看,第一种是比较好的,第二种会有一些问题

再说一下对于重写父类里的方法和属性的问题:

如果是第一种写法,写在call里的方法,并不能覆盖父类里的方法,写在extend里的就可以,但是,写在extend里时,会遇到一个问题,当覆盖父类方法的时候,想要通过this拿到当前类的对象,如classB的对象,就很困难,所以,对于覆盖父类的方法,还是写在classB里比较好,通过,this.method = function(config){}这样,就可以直接覆盖父类的方法。

就本人而言,更喜欢通过这种方式来重写父类的方法与属性,因为这样写与java的继承和重写就十分像了,Java中是通过extends来继承的,这样写也是通过Ext.extend来继承,

call就像是Java中的构造器,最重要的,覆盖的方法与属性,与java覆盖时的地方都是一样的,都在子类里。

对于ExtJS,要抛弃掉dom这个概念,将ExtJS想像成Java,才能够更好的理解他的继承与实现时遇到的一些问题,当这些问题想清楚了,才会发现这些问题解决起来是如此的简单。