yaogeabc 2009-01-07 12:43
浏览 173
已采纳

Ext.TabPanel多(层)次继承以后报错

Ext.TabPanel多次继承以后报错



最近在项目对Ext.TabPanel进行继承发现一个问题

就是当对Ext.TabPanel进行多次的继承之后,给items里面家东西就会报错.



代码如下:

var TestExtend=Ext.extend(Ext.TabPanel,{})

function TeEE(){
TeEE.superclass.constructor.call(this);
}
Ext.extend(TeEE,TestExtend,{

/* //代码中加上这一段就会报错

items: [{
title: 'Tab 1',
html: 'A simple tab'
},{
title: 'Tab 2',
html: 'Another one'
}]*/

})
// 当在TestExtend或者是TeEE中加上items时 执行这个会报错
check_TP2=new TeEE();

//执行 这个则不会报错
check_TP2=new TestExtend();



代码中TestExtend继承了Ext.TabPanel, TeEE继承TestExtend.

使用TeEE的时候,在TestExtend或者是TeEE中加上items就会报错.



但是 单独使用TestExtend却没有任何问题



这个让人觉得Ext.TabPanel是不是不能多次继承,或则是我对Ext继承理解不够.




问题补充:
多谢解答

不过 我还是有疑问:

1、我的TeEE 是最终调用的类 ,而且只调用一次,这样这个错误就和引用无关



2、在 正常的TestExtend中 我会扩展一些自己的东西

为了简化问题,我连TestExtend 在继承Ext.TabPanel 类时完全简化。然后执行new TeEE().

直接这样继承也会有问题?
问题补充:
经过反复的测试

的确是和items这种引用类型有关



但是 我写成这样就可以,为什么?

function TeEE(config){
this.items=[
{
title: 'Tab 1',
html: 'A simple tab'
},{
title: 'Tab 2',
html: 'Another one'
}
]
TeEE.superclass.constructor.call(this, config);
}
Ext.extend(TeEE,TestExtend,{})
  • 写回答

2条回答 默认 最新

  • mplive112 2009-01-07 12:43
    关注

    多层继承肯定是没问题的
    问题出在你继承的时候,不要添加引用的属性,例如你这里的 items,这种引用类型在创建多个实例的时候是公用的,一个实例修改 items 后其他实例访问时已经不是之前那个了。子类新加的属性最好是值类型,例如:string,number,bool等等
    另外你这里添加的 items 属性在父类中已经定义,非常危险

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度