《extjs学习》word版

《extjs学习》word版

ID:22684388

大小:4.47 MB

页数:271页

时间:2018-10-30

《extjs学习》word版_第1页
《extjs学习》word版_第2页
《extjs学习》word版_第3页
《extjs学习》word版_第4页
《extjs学习》word版_第5页
资源描述:

《《extjs学习》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、使用Ext.extend进行继承的一个有趣的问题在Ext的使用过程中,偶然发现了一个有趣的问题,和大家共享一下。先看如下代码://定义一个基类,一个数组成员arr,和一个空函数initvarBaseClass=Ext.extend(Ext.util.Observable,{arr:[],init:Ext.emptyFn});//定义一个子类,继承自BaseClass,并重写init方法,向数组arr中添加一个1varSubClass1=Ext.extend(BaseClass,{init:function(){th

2、is.arr.push(1);}});//再定义一个子类,也继承自BaseClass,并重写init方法,向数组arr中添加一个2varSubClass2=Ext.extend(BaseClass,{init:function(){this.arr.push(2);}});functionextTest(){varc1=newSubClass1();c1.init();alert(c1.arr);//这里得到的应该是1,结果也确实是1,没错varc2=newSubClass2();c2.init();alert(c

3、2.arr);//这里得到的应该是一个2,但是实际结果却是1,2,有趣的问题出现了}在执行extTest函数时,收到的两个alert分别是1和1,2,而且,如果不断的执行extTest函数,得到的值会不断的增加,这是什么原因呢?问题肯定是处在Ext.extend方法上,加载debug版本的脚本,对这个方法进行单步跟踪,发现最终问题出现在Ext.override函数上,看图:看来在那个for循环之中,只是将overrides中的各个属性进行简单赋值操作,但是,对于本例中出现的数组,赋值只能传递对数组的引用,也就是说S

4、ubClass1和SubClass2将共享一个数组,因为他们引用的是同一个数组,怪不得得到的结果会与期望的不一致呢。当然,对于上面的代码适当进行修改,既可以得到预期的值varBaseClass=Ext.extend(Ext.util.Observable,{arr:null,init:function(){this.arr=[];//initarrhere.}});varSubClass1=Ext.extend(BaseClass,{init:function(){SubClass1.superclass.init

5、.call(this);//callbaseclass'sinitfunctionthis.arr.push(1);}});varSubClass2=Ext.extend(BaseClass,{init:function(){SubClass2.superclass.init.call(this);//callbaseclass'sinitfunctionthis.arr.push(2);}});functionextTest(){varc1=newSubClass1();c1.init();alert(c1.ar

6、r);varc2=newSubClass2();c2.init();alert(c2.arr);}虽然这只是一个很小的问题,但是却不容忽视,我就犯了一个这样的“错误”,郁闷了好长时间才发现原因,因此给大家提个醒。Ext.extend用法以及代码解读概述Ext.extend是Ext的继承机制,这个函数的代码相当难懂。要明白这个函数的代码,首先要知道这个函数如何使用。使用方式使用示例假设有个function名为SuperClass,要实现一个子类,名为MyClass。下面的两种方式都可以实现这个功能。MyClass=E

7、xt.extend(SuperClass,{/**/});Ext.extend(MyClass,SuperClass,{/**/}); 下面来个具体示例:vara=function(id){   this.id=id;}a.prototype={   tostring:function(){       returnthis.id;   }};           b=function(id){   b.superclass.constructor.call(this,id);}Ext.extend(b,a,{  

8、 tostring:function(){       returnString.format("b:{0}",this.id);   }});//测试一下varobj1=newa("obj1");alert(obj1.tostring());varobj2=newb("obj2");alert(obj2.tostring());或者下面的代码,可以得到同样

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。