`
MVC2008MVC
  • 浏览: 7285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

值得一看的文章EXT (超值)

阅读更多
一、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故意要把我们打入冷宫。

    虽然是基础,却是相对的,因为就是这寥寥几行代码,蕴含了丰富的设计哲学,细细体会,才知其味。

[转]
分享到:
评论
10 楼 xiaohewoai 2010-05-05  
这个好象是别人写的吧!
9 楼 zqj15011 2010-03-30  
很好 学习了
8 楼 joeyhacker 2010-03-15  
来点Ext.Direct的呗? 都啥年代了
7 楼 终点阿虎 2010-03-15  
不错,很深刻。
收藏了,LZ再接再厉
6 楼 mrlong 2009-10-11  
学习学习学习学习
5 楼 goodfifa08 2009-09-01  
不错,基础很重要
4 楼 fireinjava 2009-08-31  
Ext.apply(this, config);
学习了
3 楼 atian25 2009-08-07  
顺便说下,你的url也是错的~ 不能贴相对链接的

2 楼 MVC2008MVC 2009-08-07  
加上了,怪一部分怎么成那样了。..
1 楼 atian25 2009-08-07  
2.0的旧东西了.
而且连个url标签都不给

相关推荐

    ext 视频 值得一看

    ext 视频 值得一看 从网上当的,可以看看

    EXT动态新增一行

    EXT,全称EXT JS,是一种基于JavaScript的富客户端框架,由Sencha公司开发,用于构建交互性强、功能丰富的Web应用程序。在EXT中,"动态新增一行"是指在表格或者布局中,通过用户操作(比如点击按钮)来动态地添加新...

    ext文章汇总

    extjs.org.cn 的文章. 都非常不错. 我是一个一个保存的.52篇绝对值了. 不爱下的,也可以去他们的网站看.效果更好.呵呵.

    ext教程、ext核心API 、ext中文教程

    在压缩包中的"EXT教程"文件,可能包含了从入门到进阶的各类教程文章,覆盖了EXT的基本概念、组件使用、布局配置、数据绑定等多个方面。通过阅读这些教程,你可以逐步掌握EXT的开发技巧,从而构建出专业级别的Web应用...

    ext5第一部分

    【标题】"ext5第一部分"的描述虽然简略,但可以推测这可能是指Linux文件系统EXT5的第一部分内容。EXT5是Linux内核中的一个拟议的文件系统扩展,尚未正式发布,通常我们所说的EXT系列文件系统指的是EXT2、EXT3、EXT4...

    Windows读取Ext4分区的工具 Ext2Read

    Linux最常用的文件系统类型之一就是EXT系列,包括EXT2、EXT3和EXT4。然而,Windows操作系统默认并不支持直接读取这些格式的分区。这时,就需要借助第三方工具来实现这一目标,例如“Windows读取Ext4分区的工具”——...

    grid js 例子一个 ext 的

    根据给定的信息,我们可以推断出这是一篇关于如何使用 Ext JS 框架中的 Grid 组件的文章。Ext JS 是一款基于 JavaScript 的前端框架,它提供了丰富的用户界面组件,包括表格(Grid)。以下是对该文章内容的详细解读...

    ext3.jar ext使用非常多

    EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,主要应用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。EXT3.jar是EXT框架的一个版本,它包含EXT库的Java版本,通常用于Java Web应用程序...

    在windows下使用Ext2Fsd访问EXT4分区

    Ext2Fsd是一个免费的开源软件,专门设计用于Windows系统上读/写Linux的EXT2、EXT3和EXT4文件系统。 **Ext2Fsd的主要功能:** 1. **读写支持**:Ext2Fsd允许Windows用户直接访问EXT4分区,包括读取文件、创建文件、...

    ext 下拉树 ext2

    标题中的"ext 下拉树 ext2"指的是使用Ext JS库构建的一个特定版本的下拉树组件,其中"ext2"可能表示使用的是Ext JS的2.x版本。Ext JS是一个强大的JavaScript框架,主要用于构建富客户端Web应用程序,它提供了一系列...

    Ext2IFS windows

    总结,Ext2IFS是一个实用的工具,帮助Windows用户无缝地与Linux的ext文件系统交互,无论是为了数据共享还是故障排查,都是一个值得拥有的工具。正确使用并注意数据安全,能极大地提高跨平台工作的效率。

    ext下载包,ext,ext包,ext下载

    EXT是一个流行的JavaScript库,主要用于构建富互联网应用程序(RIA)。它由Sencha公司开发,提供了丰富的UI组件和数据管理功能,让开发者能够创建交互性强、视觉效果出色的应用程序。标题中的"ext下载包"指的是EXT库...

    EXT 的一个例子lookup

    EXT 是一个广泛使用的JavaScript 库,主要用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件,包括表格、面板、窗口、菜单等,使得开发者能够创建功能强大的交互式Web应用。在EXT 中,"lookup"通常指的是...

    Ext实例详解 超值!!

    在这个"Ext实例详解 超值!!"的资源中,你将找到一系列适合自学者和初学者的教程,帮助你深入理解和掌握ExtJS的基本概念和高级特性。 首先,让我们从基础开始。ExtJS的核心是组件模型,它允许开发者通过组合各种小...

    ext-2.0 ext-2.0 ext-2.0 ext-2.0 ext-2.0

    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

    ext4_utils

    2. **mke2fs**:虽然主要针对ext2和ext3,但也可以用于创建ext4文件系统,它是mkfs.ext4的一个别名。 3. **tune2fs**:调整ext4文件系统的参数,如预分配、日志大小、inode比例等,以优化性能或适应特定工作负载。 4...

    Ext Designer EXt UI设计插件

    EXT Designer是一款专为EXT UI框架设计的可视化设计工具,它极大地简化了EXT用户界面的创建过程,让开发者和设计师能够快速、高效地构建出复杂的Web应用程序界面。EXT UI是一种流行的JavaScript库,它提供了丰富的...

    Windows 7下使用Ext2Fsd读取写入Linux Ext3&Ext4分区文件

    Ext2Fsd(Extended File System for Windows)是一款免费的开源软件,它为Windows提供了对Linux Ext2、Ext3和Ext4文件系统的支持。通过安装和配置Ext2Fsd,用户可以在Windows中浏览、读取、写入甚至创建、删除Linux...

    Ext教程ext2-Ext简易教程

    Ext是一个强大的JavaScript库,专为构建富客户端的Web应用程序而设计。它是一个Ajax框架,意味着它专注于通过异步通信更新用户界面,以提供更流畅、响应更快的用户体验。Ext的核心特性在于其丰富的用户界面组件和...

    ext 教材 ext js 教程

    EXT JS 是一种流行的JavaScript库,专门用于构建富客户端Web应用程序。它提供了丰富的用户界面组件和强大的数据绑定功能。EXT JS 教材和教程的目标是帮助开发者更好地理解和掌握这个框架,从而提升他们的Web开发技能...

Global site tag (gtag.js) - Google Analytics