ext中有关继承的实现的关键代码如下:(Ext.js中)
extend:
extend : function(){
// inline overrides
var io = function(o){
for(var m in o){
this[m] = o[m];
}
};
var oc = Object.prototype.constructor;
return function(sb, sp, overrides){
if(typeof sp == 'object'){
overrides = sp;
sp = sb;
sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
}
var F = function(){}, sbp, spp = sp.prototype;
F.prototype = spp;
sbp = sb.prototype = new F();
sbp.constructor=sb;
sb.superclass=spp;
if(spp.constructor == oc){
spp.constructor=sp;
}
sb.override = function(o){
Ext.override(sb, o);
};
sbp.override = io;
Ext.override(sb, overrides);
sb.extend = function(o){Ext.extend(sb, o);};
return sb;
};
}()
override:
override : function(origclass, overrides){
if(overrides){
var p = origclass.prototype;
for(var method in overrides){
p[method] = overrides[method];
}
}
}
Ext.apply:
Ext.apply = function(o, c, defaults){
if(defaults){
// no "this" reference for friendly out of scope calls
Ext.apply(o, defaults);
}
if(o && c && typeof c == 'object'){
for(var p in c){
o[p] = c[p];
}
}
return o;
};
最关键的是extend部分的代码,它使得如果子类没有constructor(或者说子类的constructor就是个默认的Object),那么当new一个子类的时候,会调用他的父类的构造器,因此,我们看到Panel是直接通过Ext.Panel = Ext.extend(Ext.Contailer,{...});的方式直接定义的,在new Panel({...})的时候就能层层进去一直到有构造器的超类Ext.Component,并执行这个超类的构造器里的代码。而Ext.Component的构造器代码中有this.initComponet()方法,这样就能够调用子类的initComponent()方法,而子类的initComponent()方法中都有子类名.superclass.initComponent();这样的代码来调用父类的init方法,这样我们在new一个子类的后就能够直接初始化了所有的信息。
extend中最关键的一句话是:
sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
它表示了执行父类构造器的原因,
new对象时,就是执行这个function(){sp.apply(this, arguments);}方法,
sp.applay()执行时,父类构造器就会马上被执行。
比较并执行下面的代码就可以理解了上面说的内容了:
1、子类有构造器的情况
Parent = function() {
alert("parent");
};
Child = function() {
alert("child");
};
Ext.extend(Child, Parent, {
init : function() {
alert("child's init function");
}
});
var cl = new Child();// 输出结果:child
cl.init();// 输出结果:child's init function
2、子类没有构造器的情况
Parent = function() {
alert("parent");
};
Child = Ext.extend(Parent, {
init : function() {
alert("child's init function");
}
});
var cl = new Child();// 输出结果:parent
cl.init();// 输出结果:child's init function
分享到:
相关推荐
#### 六、Function类(第6页) - **概述**:Function类提供了一些用于处理函数的方法。 - **常用方法**: - `Ext.Function.createSequence(fn, seqFn)`:创建一个函数,该函数在调用原始函数后调用另一个函数。 - ...
- **applayout.js**: 提供了一个示例脚本文件,展示了如何使用EXT构建应用程序。 - **公开Public、私有Private、特权的Privileged?**: 解释了EXT中变量和方法的访问控制。 #### 6. DomQuery基础 DomQuery是EXT中...
- 通过`Ext.extend`和`Ext.override`方法可以实现类的继承和重写。 - **配置(config)选项** - 配置选项是Extjs组件的核心,用于设置组件的各种属性和行为。 - 通常在组件构造函数中通过传递一个配置对象来指定...
5. **Ext.apply()和Ext.applyIf()** - `Ext.apply()`用于合并对象,`Ext.applyIf()`则是在目标对象中不存在属性时才进行合并。 #### 四、消息框使用 1. **消息框概述** - 消息框是用于向用户展示信息或请求输入的...
在EXT JS这个强大的JavaScript框架中,日期控件是常见的组件之一,用于用户输入或选择日期。然而,标准的EXT JS日期字段(DateTimeField)默认仅支持日和月的选择,不包含时间部分,即小时、分钟和秒。为了解决这个...
-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...
- **Ajax文件上传**:演示如何实现文件上传功能。 #### 第十二章:分页与ComboBox - **关于分页**:探讨在大型数据集上实现分页的必要性。 - **从Servlet获取当前页数据**:展示如何从前端获取并处理分页数据。 - *...
- Sphinx是一个基于Python的文档生成框架,它通过解析源文件(通常是`.rst`文件)来构建和渲染文档。 - ReStructuredText(简称reST)是Sphinx主要使用的标记语言,简洁易读,适合编写技术文档。 2. **安装Sphinx...
- 文件系统:了解不同的文件系统类型,如FAT、NTFS、EXT4。 - 并发与同步:锁机制、信号量、条件变量、死锁。 - 调度算法:先来先服务(FCFS)、短作业优先(SJF)、轮转调度等。 4. 网络: - OSI七层模型与TCP...
- **applayout.js**:JavaScript 文件,用于初始化 EXT 组件和编写业务逻辑。 #### 七、EXT源码概述 - **揭示源代码**:对于想要深入了解 EXT 内部工作原理的开发者来说,阅读源代码是非常有益的。 - **发布Ext源码...
-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...
4. **编写第一个应用程序**:创建一个简单的 HTML 文件,引入 Ext JS 的 CSS 和 JS 文件,然后编写一些基础的 Ext JS 代码来测试环境是否正确搭建。 #### 四、ExtJS基础组件使用 1. **容器(Container)**:容器是...
### C#面试题知识点解析 #### 一、项目经验与技术栈回顾 - **项目功能**: 能够清晰地描述项目的基本功能,包括项目的背景、目标以及如何满足用户需求。 - **模块实现**: 详细说明自己负责的具体模块,以及在这个...
- **写文件css、js**: 序列化数据可以写入文件,然后通过CSS或JavaScript在页面上显示出来,达到回显效果。 - **DNSlog**: 在序列化数据中嵌入DNS请求,通过记录DNS查询日志实现信息回显。 2. **ClassLoader基础...
实现UniDBGridExcel文件下载的过程与第18条类似,主要区别在于具体实现细节的不同。 #### 21. Excel文件导入系统 导入Excel文件到系统中,一般遵循以下步骤: - **文件上传**:提供文件上传接口,让用户上传Excel...
5. **ext**:可能指的是Java的扩展机制,如第三方库的使用、Java插件系统或者扩展API的讲解。 结合以上分析,这篇博客可能是一个全面介绍Java基础并结合实际案例的教程,涵盖了从基本语法到高级特性的多个方面,...