`
xiaozhi7616
  • 浏览: 195931 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext学习笔记02 - 构造方法,类继承,类实例方法重写

    博客分类:
  • Ext
阅读更多

刚刚走了个大弯路,朋友们见笑,我这见识实在太少了,开始想找个有语法提示的IDE,就直接想到了Aptana,下载一个最新版本,然后就弹出来一大堆东西要更新,更新就更新吧,更新一半就报错,看他给的提示,说xxx本机已经装了不能再装,那个版本不新了不能装,好长的一溜,找了半天,终于把非法的插件都去掉了,安装了一半又出问题了,我倒,faint,怒了,又跑回MyEclipse安装Spket(参考:http://www.iteye.com/topic/188454 ),终于搞定,本来几分钟搞定的问题,让我白费了半天力气。废话少说,开始学习。

 

书接上回,走你....

 

构造方法

构造方法就是在初始化一个对象同时执行的方法。

 

java中是这样的

public Person(String name, String sex) {
	this.name = name;
	this.sex = sex;
}

 

看Ext是怎么实现的

Ext.namespace("com.meizhi");

//构造方法
com.meizhi.Person = function(_cfg) {
	Ext.apply(this, _cfg);
}

//类静态方法
com.meizhi.Person.print = function(_name, _sex) {
	var _person = new com.meizhi.Person({name:_name,sex:_sex});
	_person.print();
}

Ext.apply(com.meizhi.Person.prototype, {
		print:function(){
			alert(String.format("姓名:{0}, 性别:{1}", this.name, this.sex));
		}
	});

 

 

这里看起来有一点点不一样哦,和之前的类实例化代码有差别,name和sex属性在 Ext.apply(com.meizhi.Person.prototype, {}) 过程中并没有被构造,而是通过构造方法的参数 _cfg 将这两个属性传进去的,事实上,构造类实例的时候将对象的一组属性作为一个对象传到构造方法中, _cfg 参数就是传进来的属性对象

 

调用,因为print方法是类静态方法,所以采用这种方式来调用

<script type="text/javascript">   
	new com.meizhi.Person.print("meizhi","男");   
	new com.meizhi.Person.print("katrana","女");   
</script> 

 

 

这种方式在Ext中经常被用到,因为这种方式更加的灵活,在构建对象的时候动态的设置对象的属性,在对象属性比较的多的情况下简化了构造过程。

 

 

类继承

构造几个必要的类来模拟继承的场景,分别是父类Person,子类Teacher和Student,把它们分开来写。

 

Person.js

Ext.namespace("com.meizhi");

//构造方法
com.meizhi.Person = function(_cfg) {
	Ext.apply(this, _cfg);
}

Ext.apply(com.meizhi.Person.prototype, {
		role:"无",
		print:function(){
			alert(String.format("姓名:{0}, 性别:{1}, 角色:{2}", this.name, this.sex, this.role));
		}
	});

 

 

Teacher.js

Ext.namespace("com.meizhi");

com.meizhi.Teacher = function(_cfg) {
	Ext.apply(this, _cfg);
}

Ext.extend(com.meizhi.Teacher, com.meizhi.Person, {
		role:"老师"
	});

 

 

Student.js

Ext.namespace("com.meizhi");

com.meizhi.Student = function(_cfg) {
	Ext.apply(this, _cfg);
}

Ext.extend(com.meizhi.Student, com.meizhi.Person, {
		role:"学生"
	});

 

子类Teacher和Student中首先定义了一个构造方法,然后声明继承,在extend()方法中还可以将属性重新设置。

 

extend()方法的参数格式:Ext.extend(子类, 父类, { 属性列表 });

 

调用,别忘了引入相关的JS文件

<script type="text/javascript" src="person.js"></script>
<script type="text/javascript" src="teacher.js"></script>
<script type="text/javascript" src="student.js"></script>
<script type="text/javascript">
	var _teacher = new com.meizhi.Teacher({name:"陈治文", sex:"男"});
	_teacher.print();
	
	var _student = new com.meizhi.Student({name:"katrana", sex:"女"});
	_student.print();
</script>

 

 

Ext中使用extend来实现继承,Dojo中的方式比较简便,一个 dojo.declare() 方法完成了类的声明和继承两件事,区别只在于参数上。

 

 

 类实例方法重写

 直接看代码:

 

Person.js

Ext.namespace("com.meizhi");

//构造方法
com.meizhi.Person = function(_cfg) {
	Ext.apply(this, _cfg);
}

Ext.apply(com.meizhi.Person.prototype, {
		role:"无",
		print:function(){
			alert(String.format("姓名:{0}, 性别:{1}, 角色:{2}", this.name, this.sex, this.role));
		}
	});

 

 

Teacher.js

Ext.namespace("com.meizhi");

com.meizhi.Teacher = function(_cfg) {
	Ext.apply(this, _cfg);
}

Ext.extend(com.meizhi.Teacher, com.meizhi.Person, {
		role:"老师",
		print:function(){
			alert(String.format("{0}是一名{1}{2}", this.name, this.sex, this.role));
		}
	});

 

 

Student.js

Ext.namespace("com.meizhi");

com.meizhi.Student = function(_cfg) {
	Ext.apply(this, _cfg);
}

Ext.extend(com.meizhi.Student, com.meizhi.Person, {
		role:"学生",
		print:function(){
			alert(String.format("{0}是一名{1}{2}", this.name, this.sex, this.role));
		}
	});

 

调用

<script type="text/javascript" src="person.js"></script>
<script type="text/javascript" src="teacher.js"></script>
<script type="text/javascript" src="student.js"></script>
<script type="text/javascript">
	var _person = new com.meizhi.Person({name:"meizhi",sex:"男"});
	_person.print();

	var _teacher = new com.meizhi.Teacher({name:"陈治文", sex:"男"});
	_teacher.print();
	
	var _student = new com.meizhi.Student({name:"katrana", sex:"女"});
	_student.print();
</script>

 

 

结果会输出“姓名:梅智,性别:男,角色:无”,“陈治文是一名男老师”和“katrana是一名女学生”。

 

可见父类是没有变化的,子类重写父类中的属性和方法,只会改变子类中的属性和方法。

 

 

回顾一下java中的“重写 overwrite”和“重载 override”,简单的说,不是非常准确的解释:

 

重写 overwrite: 重写方法必须和被重写方法具有相同的方法名,参数列表和返回类型。

重载 override:重载方法必须和被重载方法具有相同的方法名和返回类型,但是参数列表不相同

 

详细的解释参考一下:http://kiddwyl.iteye.com/blog/179325

 

 

Ext学习笔记01 - NameSpace,类实例属性,类实例方法,类静态方法

Ext学习笔记02 - 构造方法,类继承,类实例方法重写

Ext学习笔记03 - 事件

Ext学习笔记04 - UI组件 - Component, Button

Ext学习笔记05 - UI组件 - Panel,TextField

Ext学习笔记06 - Window

Ext学习笔记07 - Window及Window中的布局

Ext学习笔记08 - 日期控件

Ext学习笔记09 - ComboBox

 

 

 

分享到:
评论
1 楼 小卡卡西 2011-10-13  
  3Q ,看了好几遍了,用处很大!

相关推荐

    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

    EXT学习笔记-项目应用实践

    这篇EXT学习笔记主要涵盖了EXTJS中面向对象编程的一些关键概念和实践,包括命名空间、类定义、构造函数、属性与方法的访问控制(私有和公有)、静态属性与方法以及继承机制。 1. **命名空间**:在EXTJS中,命名空间...

    3------通过实例学习------Ext.js------.pdf

    8. **bootstrap.js**:Ext.js的库引导文件,可以根据参数自动选择加载`ext-all.js`或`ext-all-debug.js`。 9. **ext-all.js**:Ext.js的核心库,用于生产环境。 10. **ext-all-debug.js**:调试版本的核心库,包含...

    3------通过实例学习------Ext.js------.docx

    通过实例学习Ext.js,我们可以深入了解其核心组件、布局管理、数据绑定以及用户界面构建等关键知识点。 首先,让我们看一下解压后的Ext.js文件结构: 1. **builds**:这个目录包含了经过压缩和优化的Ext.js代码,...

    bcprov-ext-jdk16-1.45.jar

    bcprov-ext-jdk16-1.45.jar资源包 ,在进行JAVA的ECC椭圆算法调用时,需要用到的jar包

    ext-ms-win-gdi-desktop-l1-1-0.dll

    ext-ms-win-gdi-desktop-l1-1-0.dll 用于解决这个dll文件丢失问题,下载后将此文件放置在相关文件根目录下,即可解决丢失问题

    Gwt-ext学习笔记之基础篇

    ### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....

    ext-3.3.1 ext-3.3.1

    ext-3.3.1ext-3.3.1ext-3.3.1ext-3.3.1ext-3.3.1ext-3.3.1

    EXT dojochina Ext类构造方法.rar

    Ext类的构造方法通常以`Ext.extend()`开头,这是Ext JS中实现继承的关键方法。它接受两个参数:子类(派生类)和父类(基类)。通过这个方法,我们可以轻松地创建自定义组件或扩展已存在的组件,继承其属性和方法。 ...

    (转载)GWT -EXT学习笔记-基础

    3. 在项目的`public`目录下新建`js`文件夹,并将`ext-2.1`目录下的`adapter`、`resources`以及`ext-all.js`、`ext-core.js`文件复制到`js`文件夹下。 **步骤二:修改HTML宿主页面和模块配置文件** 1. 修改`...

    Ext API详解--笔记

    这篇笔记将深入探讨Ext Js的核心API,涵盖多个关键模块。 1. **Ext.Element**: `Ext.Element`是Ext Js中的基础元素操作类,它封装了对DOM元素的各种操作,如尺寸调整、样式修改、事件处理等。在`EXT核心API详解...

    ext继承重写

    EXT JS采用面向对象的编程方式,允许开发者通过继承机制来扩展类的功能,同时通过重写方法来定制或优化原有功能。 EXT JS中的“extend”关键字是实现继承的关键。当你创建一个新的类并声明它`extend`另一个类时,新...

    ext-base ext-4.1.1a-commercial

    ext-base ext-4.1.1a-commercial

    spketdwcs-ext-2.1.mxp

    spketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-...

    ext 基本知识-store-proxy-reader-ext-connection-实例

    1. 创建一个Ext.data.Connection实例`conn`,配置请求参数。 2. 调用`conn.request()`发送请求,设置成功和失败的回调函数。 3. 创建JsonStore实例`ds`,指定数据来源URL、根节点以及字段信息。 4. JsonStore会使用...

    Gwt-ext学习笔记

    这篇学习笔记将深入探讨Gwt-ext的核心概念、功能以及如何在实际项目中应用。 GWT是由Google开发的一个开源框架,它允许开发者使用Java语言来编写前端Web应用。GWT编译器会将Java代码转换为优化过的JavaScript,以...

    ext+jsp分页---好不好,大家说了算。下载不扣分,回帖加1分,欢迎下载,童叟无欺。

    ext+jsp分页---好不好,大家说了算。下载不扣分,回帖加1分,欢迎下载,童叟无欺。ext+jsp分页---好不好,大家说了算。下载不扣分,回帖加1分,欢迎下载,童叟无欺。ext+jsp分页---好不好,大家说了算。下载不扣分,...

    EXT学习札记--京华志

    - 需要先加载`ext-base.js`文件,再加载`ext-all.js`文件,这是因为前者包含了后者运行所需的基础功能。 - 在某些情况下,还需要设置页面的字符集编码,例如`&lt;meta http-equiv="Content-Type" content="text/html;...

Global site tag (gtag.js) - Google Analytics