ext 继承(extend) 理解练习

<script type="text/javascript">

Ext.onReady(function(){

    function config() {
             this.id = 5;  
            this.name = 'myclass';
            this.age = 15;
        };
        
    A = function (config) {
        this.id = config.id;
    }
    A.prototype.sayHello = function(){
        alert("function from class A!");
    }
    
    
    /*
    子类有自己定义的构造函数
    超类A的属性(id)没有被B继承过来。
    因为Ext.extend()函数里面的if(typeof sp == 'object'){…}不成立,在继承之后,子类B仅仅获得了超类的sayHello()方法。
    */
    
    B = function(config){
        this.name = config.name;
    }
    
    B = Ext.extend(B,A);
//    new B(new config()).sayHello();
//    alert(new B(new config()).id);
    
    /*
    不提供子类自己的构造函数
    这样的话子类C可以顺利地获得超类A的id属性和sayHello()方法
    */
    C = Ext.extend(A,{
        id:77,
        who:'c Class'
    });
//    alert(new C(new config()).id);
//    alert(new C(new config()).who);
//    new C(new config()).sayHello();
    
    /*
    在overrides里面提供constructor
    必须加一句调用:this.superclass.constructor.call,这句实际上是调用父类的构造器来使子类获得父类里面定义的参数和方法。
    但是这么做有一点不是很爽,例如我要自定义一个MyPanel来继承Ext.Panel,如果我想采用第三种写法,自己提供的overrides里面必须有如上的手工调用的语句。如果继承的层次稍微深一点,那么每次继承都要写同一句话,这显然是很不爽快的事情。
    */
    
    D = function(config){
        this.age = config.age;
        D.superclass.constructor.call(this,config);

    }
    Ext.extend(D,A,{});
    
    alert(new D(new config()).id);
    alert(new D(new config()).age);
    new D(new config()).sayHello();

 

    var d = new D({
        age:45,
        id:88
    });
   
    alert(d.id);
    alert(d.age);
    d.sayHello();
    
});
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值