EXT 笔记 构造方法,类继承,类实例方法重写
来源:互联网 发布:怎么才能投诉淘宝卖家 编辑:程序博客网 时间:2024/06/03 22:57
构造方法
构造方法就是在初始化一个对象同时执行的方法。
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:重载方法必须和被重载方法具有相同的方法名和返回类型,但是参数列表不相同 。
- EXT 笔记 构造方法,类继承,类实例方法重写
- Ext类的构造方法
- 方法的重载、方法重写、类的继承与构造方法
- Scala中的继承:超类的构造、重写字段、重写方法
- Scala学习回顾(六)---- Scala中的继承:超类的构造、重写字段、重写方法
- 12.Scala中的继承:超类的构造、重写字段、重写方法代码实战
- 接口、类、抽象类、继承、构造函数、方法重写、方法重载、自动转型、多态、引用传递
- JavaDay06--Homework(方法重载和重写的区别,构造方法,继承类)
- java类继承中的构造方法实例详解
- 重写和继承关系中的构造方法
- 构造方法的继承实例
- 构造器、方法重载、继承、方法重写、自动转型、多态课堂笔记
- 类小结1:方法重载 变量 封装 import 继承 重写父类方法 调用父类构造方法 多态
- python继承和重写init方法--实例
- iOS类方法、实例方法、构造方法
- Scala 深入浅出实战经典 第12讲:Scala中的继承:超类的构造、重写字段、重写方法代码实战
- Scala学习第十二天 Scala中的继承:超类的构造、重写字段、重写方法代码实战
- Ext学习笔记 - NameSpace,类实例属性,类实例方法,类静态方法
- Mathtype6.X+Word2003 出错AutoExecCLS Error
- .net多线程学习笔记 3 线程间同步
- Android中的WatchDog
- Oracle新手最常碰到错误及解决方案
- zoj 3131 Digital Clock
- EXT 笔记 构造方法,类继承,类实例方法重写
- assert 断言用法总结
- Some reading excerpts (2011/01/25)
- 航空专家:中国北斗系统与美国GPS相比存3大难点
- COM组件初始化
- Open Scene Graph 内存管理
- 正则表达式小结
- Ext中的事件机制
- startActivityForResult用法