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

书接上回,走你....

构造方法

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

java中是这样的

Java代码 
  1. public Person(String name, String sex) {
  2. this.name = name;
  3. this.sex = sex;
  4. }

看Ext是怎么实现的

Js代码 
  1. Ext.namespace("com.meizhi");
  2. //构造方法
  3. com.meizhi.Person = function(_cfg) {
  4. Ext.apply(this, _cfg);
  5. }
  6. //类静态方法
  7. com.meizhi.Person.print = function(_name, _sex) {
  8. var _person = new com.meizhi.Person({name:_name,sex:_sex});
  9. _person.print();
  10. }
  11. Ext.apply(com.meizhi.Person.prototype, {
  12. print:function(){
  13. alert(String.format("姓名:{0}, 性别:{1}", this.name, this.sex));
  14. }
  15. });

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

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

Js代码 
  1. <script type="text/javascript">
  2. new com.meizhi.Person.print("meizhi","男");
  3. new com.meizhi.Person.print("katrana","女");
  4. </script>

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

类继承

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

Person.js

Js代码 
  1. Ext.namespace("com.meizhi");
  2. //构造方法
  3. com.meizhi.Person = function(_cfg) {
  4. Ext.apply(this, _cfg);
  5. }
  6. Ext.apply(com.meizhi.Person.prototype, {
  7. role:"无",
  8. print:function(){
  9. alert(String.format("姓名:{0}, 性别:{1}, 角色:{2}", this.name, this.sex, this.role));
  10. }
  11. });

Teacher.js

Js代码 
  1. Ext.namespace("com.meizhi");
  2. com.meizhi.Teacher = function(_cfg) {
  3. Ext.apply(this, _cfg);
  4. }
  5. Ext.extend(com.meizhi.Teacher, com.meizhi.Person, {
  6. role:"老师"
  7. });

Student.js

Js代码 
  1. Ext.namespace("com.meizhi");
  2. com.meizhi.Student = function(_cfg) {
  3. Ext.apply(this, _cfg);
  4. }
  5. Ext.extend(com.meizhi.Student, com.meizhi.Person, {
  6. role:"学生"
  7. });

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

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

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

Js代码 
  1. <script type="text/javascript" src="person.js"></script>
  2. <script type="text/javascript" src="teacher.js"></script>
  3. <script type="text/javascript" src="student.js"></script>
  4. <script type="text/javascript">
  5. var _teacher = new com.meizhi.Teacher({name:"陈治文", sex:"男"});
  6. _teacher.print();
  7. var _student = new com.meizhi.Student({name:"katrana", sex:"女"});
  8. _student.print();
  9. </script>

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

类实例方法重写

直接看代码:

Person.js

Js代码 
  1. Ext.namespace("com.meizhi");
  2. //构造方法
  3. com.meizhi.Person = function(_cfg) {
  4. Ext.apply(this, _cfg);
  5. }
  6. Ext.apply(com.meizhi.Person.prototype, {
  7. role:"无",
  8. print:function(){
  9. alert(String.format("姓名:{0}, 性别:{1}, 角色:{2}", this.name, this.sex, this.role));
  10. }
  11. });

Teacher.js

Js代码 
  1. Ext.namespace("com.meizhi");
  2. com.meizhi.Teacher = function(_cfg) {
  3. Ext.apply(this, _cfg);
  4. }
  5. Ext.extend(com.meizhi.Teacher, com.meizhi.Person, {
  6. role:"老师",
  7. print:function(){
  8. alert(String.format("{0}是一名{1}{2}", this.name, this.sex, this.role));
  9. }
  10. });

Student.js

Js代码 
  1. Ext.namespace("com.meizhi");
  2. com.meizhi.Student = function(_cfg) {
  3. Ext.apply(this, _cfg);
  4. }
  5. Ext.extend(com.meizhi.Student, com.meizhi.Person, {
  6. role:"学生",
  7. print:function(){
  8. alert(String.format("{0}是一名{1}{2}", this.name, this.sex, this.role));
  9. }
  10. });

调用

Js代码 
  1. <script type="text/javascript" src="person.js"></script>
  2. <script type="text/javascript" src="teacher.js"></script>
  3. <script type="text/javascript" src="student.js"></script>
  4. <script type="text/javascript">
  5. var _person = new com.meizhi.Person({name:"meizhi",sex:"男"});
  6. _person.print();
  7. var _teacher = new com.meizhi.Teacher({name:"陈治文", sex:"男"});
  8. _teacher.print();
  9. var _student = new com.meizhi.Student({name:"katrana", sex:"女"});
  10. _student.print();
  11. </script>

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

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

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

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

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

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

  1. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  2. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记02

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记02 课时10 GameObject.Component和Object的千丝万缕的关系 一个游戏由多个场景组成,一个场景 ...

  3. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  4. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  5. Python学习笔记(九):类和对象

    Python学习笔记(九):类和对象 关于类和对象 Python学习笔记(九):类和对象 一.类和对象 类的定义 类的实例化 类对象的使用 二.self用法 三.类方法 实例方法 类方法 静态方法 静 ...

  6. PyTorch学习笔记(六)——Sequential类、参数管理与GPU

    系列文章\text{\bf 系列文章}系列文章 PyTorch学习笔记(一)--Tensor的基础语法 PyTorch学习笔记(二)--自动微分 PyTorch学习笔记(三)--Dataset和Dat ...

  7. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  8. python学习笔记02

    python学习笔记02 面向对象Object Oriented 概述 类和对象 封装 继承 多态 类与类的关系 设计原则 总结 python学习笔记03 面向对象Object Oriented 概述 ...

  9. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

最新文章

  1. Spring 中的Scheduler
  2. microsoft mysql下载_Microsoft SQL Server 2018
  3. 状态同步与帧同步的简介
  4. 适合NetScaler AG部署的 WI 定制站点开发
  5. 边工作边刷题:70天一遍leetcode: day 92
  6. 【Python数据分析】魔术命令(Magic Command)
  7. php7 二维数组排序,PHP二维数组排序
  8. React Native 宣布重构计划!
  9. P3512 [POI2010]PIL-Pilots(单调队列+二分)
  10. 华为9月3日或推出麒麟9000;TiDB 3.0.18 发布| 极客头条
  11. vue 定制上传按钮的样式的两种方法
  12. 路由器、交换机、网关
  13. 大话西游服务器维护多长时间,《大话西游3》2010-9-21服务器停机维护公告(二)...
  14. 风行python_Python曾是程序员的“瑞士军刀”,而如今正被慢慢取代
  15. 将excel中的合并单元格拆分并填充数据
  16. 2023 闲鱼扫码自动收货跳转支付宝HTML源码
  17. Coreseek开源中文检索引擎 coreseek-4.1 win7安装教程
  18. POJ 1655 求树的重心(树形dp)
  19. 中科红旗倒下,谁来挑战windows
  20. GTD方法在项目管理中的实践

热门文章

  1. Windows修改hosts
  2. java虚拟机工作原理_Java虚拟机工作原理具体解释
  3. build openni with gcc 7
  4. MATLAB模拟导热过程,一维热传导MATLAB模拟.doc
  5. Transformer、BERT细节基础知识点
  6. 随机森林算法入门(python)
  7. python爬取了百万知乎,并做数据分析
  8. 安卓java代码写控件_安卓自定义流程进度图控件实例代码
  9. linux定时删除文件指令,Linux实践——定时删除目录下面的文件
  10. 美团 -python