一、javascript类的定义
在javascript中,通过创建一个构造函数来定义一个类,然后通过prototype来扩展类的功能。假设我们定义一个螃蟹类:
Crab = function(){
this.legs = 10;
}
Crab.prototype = {
say: function(){
alert("我是一只螃蟹,我有" + this.legs + "只脚,横行霸道是我的天性");
}
};
//测试
var crab = new Crab();
alert(crab.legs);
crab.say();
prototype是javascript一个非常重要的功能,能动态的为对象添加任何新的方法。Extjs就是基于prototype实现的OOP机制。
二、Extjs命名空间的定义
命名空间(namespace)类似于java中的包,用来对工程中的类进行有效管理。命名空间的层次结构使用“.”来划分。Ext通过namespace()方法创建命名空间。
语法:Ext.namespace(“命名空间”)
示例:Ext.namespace("com.aptech");
三、Extjs OOP
在Extjs中创建类和javascript有些不同,我们会使用他封装好的东西,而不全是基于javascript语法。站在巨人的肩膀上,确实有些高处不胜寒。所以,深刻了解javascript基础对于日后的拓深十分必要,相信我吧。
我们通常会基于命名空间创建新类,按照java的设计思想,会有封装、继承和多态。Extjs也不例外,而且Extjs为OOP做了很多基础工作,使用起来非常模式化。一个类至少应该有private和public成员,且可以派生出子类,并能重写父类的方法。那么,让我们来看看Extjs是如何做到的。
Ext.namespace("com.aptech");
com.aptech.First = function(){
//私有成员
var kiss = "中华人民共和国";
//私有方法
//公有方法
return {
//公有成员
init: function(){
alert("init");
alert(kiss);
},
//公有成员
method: function(){
alert("method");
}
};
};
我们定义了一个类First,这实在是一个没有任何业务意义的类,只是为了说明方便。First位于com.aptech命名空间中,有一个私有成员 kiss,并且向外部暴露了两个方法init()和method()。其实,在function和return之间定义的成员全总是private,而在 ruturn内部定义的成员全部是public,如果大家的javascipt基础扎实的话,这段代码并不难理解,我们定义了一个匿名构造函数,函数中的变量是局部变量,外部无法访问,返回一个对象,对象是以json格式定义的,该对象中定义的方法自然可以访问了。
javascipt本身不支持继承,但是我们可以模拟。继承说穿了就是子类将父类的成员据为已有,专业点就是“成员复制”,即可以复制成员变量,也可以复制成员方法。我们定义下面的方法完成此功能:
var extend = function(child, father){
child.prototype = father.prototype;
}
现在,我们定义一个螃蟹的子类——蟹将,螃蟹成精变成了人,由原来的10只脚变成2只脚,但狗改不了吃屎,行为不会改变,依旧横行霸道。
GenCrab = function(){this.legs = 2;};
extend(GenCrab, Crab);
var gc = new GenCrab();
gc.say();
就这样,一个新类产生了。不过,在Extjs中有更加优雅的做法。
我们定义一个类Second,继承自First,看看Extjs是如何做的。
//创建子类
com.aptech.Second = function(){
com.aptech.Second.superclass.constructor.apply(this);//调用父类构造方法
}
//com.aptech.Second子类继承自父类com.aptech.First
Ext.extend(com.aptech.Second, com.aptech.First, {
//新方法
fun: function(i){
return i * i * i;
},
//重写的方法
method: function(){
alert("Second::method")
}
});
//测试
var second = new com.aptech.Second();
alert(second.fun(5));
second.method();
哈哈,简直太优雅了,不仅可以添加新方法,还可以重写父类的方法(话外音:这不是多态的表现形式吗?)。这一切都是由Ext.extend()搞定的,这个方法有点复杂,但他的实现原理是相同的。
四、配置(config)选项
在Extjs中,初始化对象时,大量使用了config这个参数。不要恐惧,只是一个json对象而已,不过,config为Extjs立下了不少汗马功劳。
假设定义了一个学生类(Student),有姓名和性别两个属性,并且通过构造函数为属性初始化:
Student = function(name, sex){
this.name = name;
this.sex = sex;
}
//测试
var student = new Student("李赞红", "男");
alert("姓名:" + student.name + "\r\n性别:" + student.sex);
这个一定看得懂,如果看不懂,我只能表示深深的遗憾了,您不适合地球,回你的老本营火星去吧。
如果用json对象作为构造函数的参数呢?
Student = function(config){
this.name = config.name;
this.sex = config.sex;
}
//测试
var student = new Student({name: "李赞红", sex: "男"});
alert("姓名:" + student.name + "\r\n性别:" + student.sex);
嘿,果然万变不离其宗啊。换汤不换药的把戏骗不了咱们。但是,等等,请等等,如果类的成员特别多,十个,二十个,一百个,赋值语句岂不是很多很繁琐?你能想到这一点实在太聪明了,不过,Jack更聪明,他早想到了,于是有了下面的代码:
Student = function(config){
Ext.apply(this, config);
}
//测试
var student = new Student({name: "李赞红", sex: "男"});
alert("姓名:" + student.name + "\r\n性别:" + student.sex);
Ext定义了一个名叫apply()的方法,作用是将第二个参数的成员赋给第一个参数。现在,不管config中有多少个成员都没问题了。
五、Ext.apply()和Ext.applyIf()
前面我们知道了Ext.apply(obj, config)方法的作用,还有另一个方法applyIf(obj, config),从名字上看得出来,applyIf()需要满足某种条件,实在是太棒了,这么复杂的问题都没逃过你的法眼。
事先预告一下这两个方法的区别,然后再通过例子来说明:apply会将config和obj参数的同名属性值覆盖,并且将config其他属性添加到 obj中;applyIf不会将config和obj参数的同名属性覆盖,只将config其他属性添加到obj中。也就是说,obj没有而config 中有的属性最终都会复制到obj中,不同的是相同属性值是否会被覆盖的问题。
例子能说明一切问题。
Student = function(config){
this.name = "张海军";
this.sex = "男";
Ext.apply(this, config);
}
//测试
var student = new Student({name: "李赞红", sex: "男", birthday: new Date()});
alert("姓名:" + student.name + "\r\n性别:" + student.sex + "\r\n生日:" + student.birthday);
从下面结果看出,属性name和sex均被覆盖,且添加了新成员birthday。
姓名:李赞红
性别:男
生日:Fri May 01 2009 07:59:39 GMT+0800
Student = function(config){
this.name = "张海军";
this.sex = "男";
Ext.applyIf(this, config);
}
//测试
var student = new Student({name: "李赞红", sex: "男", birthday: new Date()});
alert("姓名:" + student.name + "\r\n性别:" + student.sex + "\r\n生日:" + student.birthday);
结果如下:
姓名:张海军
性别:男
生日:Fri May 01 2009 08:02:33 GMT+0800
哈,“张海军”终于没被“李赞红”替换了。
六、小结
讲了这么多,尽是些和Ext不沾边的事,是不是有点失望?
但是,我用人格担保我是个不啰嗦的人,了解我的学生肯定知道。这一章的内容是Extjs的基础,是我们能看懂源代码的保证。不然,看到Jack的代码,你以为自己进入了迷宫,或者Jack故意要把我们打入冷宫。
虽然是基础,却是相对的,因为就是这寥寥几行代码,蕴含了丰富的设计哲学,细细体会,才知其味。
[转]
分享到:
相关推荐
ext 视频 值得一看 从网上当的,可以看看
EXT,全称EXT JS,是一种基于JavaScript的富客户端框架,由Sencha公司开发,用于构建交互性强、功能丰富的Web应用程序。在EXT中,"动态新增一行"是指在表格或者布局中,通过用户操作(比如点击按钮)来动态地添加新...
extjs.org.cn 的文章. 都非常不错. 我是一个一个保存的.52篇绝对值了. 不爱下的,也可以去他们的网站看.效果更好.呵呵.
在压缩包中的"EXT教程"文件,可能包含了从入门到进阶的各类教程文章,覆盖了EXT的基本概念、组件使用、布局配置、数据绑定等多个方面。通过阅读这些教程,你可以逐步掌握EXT的开发技巧,从而构建出专业级别的Web应用...
【标题】"ext5第一部分"的描述虽然简略,但可以推测这可能是指Linux文件系统EXT5的第一部分内容。EXT5是Linux内核中的一个拟议的文件系统扩展,尚未正式发布,通常我们所说的EXT系列文件系统指的是EXT2、EXT3、EXT4...
Linux最常用的文件系统类型之一就是EXT系列,包括EXT2、EXT3和EXT4。然而,Windows操作系统默认并不支持直接读取这些格式的分区。这时,就需要借助第三方工具来实现这一目标,例如“Windows读取Ext4分区的工具”——...
根据给定的信息,我们可以推断出这是一篇关于如何使用 Ext JS 框架中的 Grid 组件的文章。Ext JS 是一款基于 JavaScript 的前端框架,它提供了丰富的用户界面组件,包括表格(Grid)。以下是对该文章内容的详细解读...
EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,主要应用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。EXT3.jar是EXT框架的一个版本,它包含EXT库的Java版本,通常用于Java Web应用程序...
Ext2Fsd是一个免费的开源软件,专门设计用于Windows系统上读/写Linux的EXT2、EXT3和EXT4文件系统。 **Ext2Fsd的主要功能:** 1. **读写支持**:Ext2Fsd允许Windows用户直接访问EXT4分区,包括读取文件、创建文件、...
标题中的"ext 下拉树 ext2"指的是使用Ext JS库构建的一个特定版本的下拉树组件,其中"ext2"可能表示使用的是Ext JS的2.x版本。Ext JS是一个强大的JavaScript框架,主要用于构建富客户端Web应用程序,它提供了一系列...
总结,Ext2IFS是一个实用的工具,帮助Windows用户无缝地与Linux的ext文件系统交互,无论是为了数据共享还是故障排查,都是一个值得拥有的工具。正确使用并注意数据安全,能极大地提高跨平台工作的效率。
EXT是一个流行的JavaScript库,主要用于构建富互联网应用程序(RIA)。它由Sencha公司开发,提供了丰富的UI组件和数据管理功能,让开发者能够创建交互性强、视觉效果出色的应用程序。标题中的"ext下载包"指的是EXT库...
EXT 是一个广泛使用的JavaScript 库,主要用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件,包括表格、面板、窗口、菜单等,使得开发者能够创建功能强大的交互式Web应用。在EXT 中,"lookup"通常指的是...
在这个"Ext实例详解 超值!!"的资源中,你将找到一系列适合自学者和初学者的教程,帮助你深入理解和掌握ExtJS的基本概念和高级特性。 首先,让我们从基础开始。ExtJS的核心是组件模型,它允许开发者通过组合各种小...
ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0
2. **mke2fs**:虽然主要针对ext2和ext3,但也可以用于创建ext4文件系统,它是mkfs.ext4的一个别名。 3. **tune2fs**:调整ext4文件系统的参数,如预分配、日志大小、inode比例等,以优化性能或适应特定工作负载。 4...
EXT Designer是一款专为EXT UI框架设计的可视化设计工具,它极大地简化了EXT用户界面的创建过程,让开发者和设计师能够快速、高效地构建出复杂的Web应用程序界面。EXT UI是一种流行的JavaScript库,它提供了丰富的...
Ext2Fsd(Extended File System for Windows)是一款免费的开源软件,它为Windows提供了对Linux Ext2、Ext3和Ext4文件系统的支持。通过安装和配置Ext2Fsd,用户可以在Windows中浏览、读取、写入甚至创建、删除Linux...
Ext是一个强大的JavaScript库,专为构建富客户端的Web应用程序而设计。它是一个Ajax框架,意味着它专注于通过异步通信更新用户界面,以提供更流畅、响应更快的用户体验。Ext的核心特性在于其丰富的用户界面组件和...
EXT JS 是一种流行的JavaScript库,专门用于构建富客户端Web应用程序。它提供了丰富的用户界面组件和强大的数据绑定功能。EXT JS 教材和教程的目标是帮助开发者更好地理解和掌握这个框架,从而提升他们的Web开发技能...