注意1:这是父类中属性的构造方式,若放在方法体内不能被子类继承
注意2:d是子类中新增加的属性,若前面不加this则属性不能被修改,个人理解可能是不加this可能不能识别到本对象内的属性
注意3:此方法是子类调用父类的构造方法,把子类定制,修改或者增加的属性传到父类,具体怎么传看下面注意4
注意4:接收子类传过来的属性如果父类没有的话就在父类中增加,然后被子类继承,如果想覆盖父类中的方法呢,看注意5
注意5:接收新建对象时传递过来的属性,若没有的话增加,若有的话覆盖
有人可能会问为什么不在继承父类方法的时候直接把需要覆盖的父类属性重写了呢?还要在下面调用重写父类的方法,个人理解,重写的时候应该为了增加父类中没有的属性方法,而调用覆盖父类属性方法的时候再覆盖为的是方便、清晰、直接、美观。呵呵
SuperClass=function(cfg){
Ext.applyIf(this, cfg);//注意4};
SuperClass.prototype.AA=function(){
alert('aa');
};
SuperClass.prototype.a="super_a";//注意1
SuperClass.prototype.b="super_b";
SuperClass.prototype.e="super_e";
SubClass = Ext.extend(SuperClass,{
BB:function(){alert('新方法');},
AA:function(){alert('重写方法');},
d:null,
constructor : function(cfg){
Ext.apply(this, cfg);//注意5
this.d="cons_d",//注意2
SubClass.superclass.constructor.call(this,{//注意3
e : "constructor_e"
});
}
});
sub=new SubClass({c:"hello_c"});
sub.AA();
sub.BB();
alert(sub.a);
alert(sub.b);
alert(sub.c);
alert(sub.d);
alert(sub.e);