第12章 JavaScript面向对象编程(OOP).ppt_第1页
第12章 JavaScript面向对象编程(OOP).ppt_第2页
第12章 JavaScript面向对象编程(OOP).ppt_第3页
第12章 JavaScript面向对象编程(OOP).ppt_第4页
第12章 JavaScript面向对象编程(OOP).ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章JavaScript面向对象编程 OOP 面向对象编程 ObjectOrientedProgramming OOP 是一种计算机编程架构 OOP的一项基本原则就是计算机程序是由多个能起到子程序作用的单元或对象组合而成的 OOP达到了软件工程的三个重要目标 重用性 灵活性和扩展性 为了实现整体运算 每个对象都可以接受信息 处理数据和向其他对象发送信息 12 1JavaScript中的类 在OOP 面向对象编程 中 类定义一类对象 描述对象的属性 数据 和方法 行为 具有相同或相似性质的对象的抽象 就是类 类的具体化就是对象 也可以说类的实例是对象 例如 张三 李四 都有名字 但是一个是 张三 一个是 李四 张三 李四 两个人都可以行走 但各自的行走速度又不一样 本节将详细的向读者介绍在JavaScript中创建和使用类 12 1 1创建类 在JavaScript中的类使用 function 来声明 functionPeople 12 1 2类的属性 上面创建的People类 没有包含任何数据 显然这是不实用的 在一个对象中 相关的数据被封装在不同的属性中 类的属性就是对象属性的抽象 现在来给People类添加一个表示名字的name属性和一个表示性别的sex属性 如下所示 functionPeople name sex this name name this sex sex 12 1 3类的方法 一个对象还应具有一些操作 用于改变对象的状态 对象及其操作就是对象的行为 类的方法是对象行为的抽象 12 1 4公有属性和私有属性 在类中通过this指针添加的属性 都是公有 public 属性 公有属性指可以被外部访问的属性 如下所示 varsomeone newPeople Susan female varname someone name 读取name属性someone name Lily 写入name属性 12 1 5公有方法和私有方法 属性有公有和私有之分 方法也有公有和私有之分 其概念与公有及私有属性类似 通过this指针添加的方法都是公有方法 公有方法可以被外部调用 例如changeName方法 私有方法则只能在对象内部被调用 其对外是不可见的 这里同样通过作用域来实现 12 1 6静态属性和静态方法 由于类的构造函数本身也是对象 直接将属性和方法添加到这个对象中 则可以达到静态属性和静态方法的效果 如下所示 functionPeople People staticProperty StaticProperty 静态属性People staticMethod function 静态方法 12 1 7原型对象prototype 在JavaScript面向对象的能力中 还有一个重要的概念 原型对象 prototype 每个对象 可以参考一个原型对象 原型对象包含自己的属性 原型对象就好像是一个对象定义的备份 当代码引用一个属性的时候 它并不存在于对象本身里 那么JavaScript会自动在原型的定义中查找这个属性 而且 一个对象的原型对象又可以参照另外一个原型对象 就这样以链式最终关联到基类对象的构造函数 这是template模型 模板方法 设计模式 中行为模式中的一种 它可以简化方法的定义 同时也可以产生强大的继承机制 12 2JavaScript中的继承 继承是面向对象程序设计语言不同于其他语言最重要的特点 所有继承 就是子类自动共享父类数据结构和方法的机制 这是类之间的一种关系 在定义和实现一个类的时候 可以在一个已经存在的类的基础上进行 把这个已经存在的类的内容作为自己的内容 并加入若干新的内容 在软件开发中 类的继承使得所建立的软件具有开放性 扩充性 它简化了对象 类的创建工作 增加了代码的可重用性 JavaScript并没有对继承提供语法上的支持 但是仍然可以巧妙的实现继承的机制 下面向读者详细介绍JavaScript中的继承 12 2 1对象冒充 对象冒充 是指一个对象冒充另外一个对象来执行其他对象的方法 或者说是一个对象将另外一个对象的方法当作自己的方法来执行 JavaScript提供了call和apply两个方法来实现这种机制 call和apply方法所实现的功能是一样的 只是参数形式不同 其语法如下所示 functionName call object argument1 argument2 argument3 functionName apply object argument1 argument2 12 2 2使用对象冒充实现继承 使用对象冒充机制可以巧妙的实现继承机制 如下所示 12 2 3继承原型对象中的属性和方法 对象冒充实现了继承 但是仍然还有一些缺陷 在使用对象冒充机制来实现继承的时候 子类只是在构造函数中调用了父类的构造函数 但是没有对父类的原型对象作任何处理 这使得定义在父类原型对象中的属性和方法没有被继承 12 2 4封装继承方法 为了简化开发 现在将继承的方法进行封装 以方便使用 如下所示 12 3更多技巧 前面2节向读者介绍了在JavaScript中使用类和继承的方法 这节将向读者介绍更多JavaScript面向对象编程的技巧 包括属性的封装 多态 命名空间等等 12 3 1属性的封装 程序中People类的name属性以私有属性的形式存储在类中 而提供给外部的属性访问接口则是getName和setName方法 这种封装方法使得程序可以在属性存取的过程中增加一些逻辑处理 并且即使类内部的实现改变了 但提供给外部的接口不变 不会影响到其他的程序 12 3 2实现多态 多态是指给同名的方法提供不同的实现能力 它使得程序可以不用关心方法的具体实现而仅仅依靠其名称来进行调用操作 12 3 3命名空间 命名空间是一个层次模型 其作用是用来避免对象命名上的冲突 以及将不同功能的类分类放置以方便使用 12 3 4实现短类名 使用命名空间带来的好处是毫无疑问的 但是同样也带来了一个麻烦 那就是如果命名空间嵌套得太深 在使用时会很不方便 例如要用到某个命名空间下的类 如下所示 varserializer newSys Web Script JavaScriptSerializer 12 4使用JSVM进行代码组织 本节主要向读者介绍使用JSVM对JavaScript代码进行组织管理的基本方法 更多高级的特性读者可以访问http www jsvm org进行了解 12 4 1下载和配置JSVM JSVM可以在http www jsvm org免费下载 当前版本为2 06 下载的是一个压缩包 解压后的文件中包含文档 示例和JSVM的核心程序 12 4 2路径和文件名的约定 打开jsvm2文件夹 如图所示 12 4 3编写类 查看HelloWorld class js的内容 可以知道如何编写一个JSVM的类 12 4 4类的按需加载 为了向读者演示如何使用JSVM来加载存放在classes文件夹中的类 这里编写了一个名为demo html的示例程序 与jsvm2文件夹平级 在示例程序中 页面被打开时没有加载任何类文件 页面上提供了一个按钮 当单击按钮时 程序会加载位于example包下的HelloWorld类 并取得该类的一个实例 最后输出一段消息 12 4 5在类中引用其他类 在实际应用当中 类与类之间往往会有依赖关系 某个类依赖于其他一个或者多个类实现的情况很常见 在类文件当中 如果当前的类需要依赖包中的类或者其他包中的类 同样可以使用 import函数来引入这些类的定义 例如现在需要一个People类 其有一个name属性 有一个sayHello方法 sayHello方法的实现依赖于example包中的HelloWorld类 People类本身位于entity包内 首先在classes文件夹内建立entity文件夹 然后在entity文件夹内建立People class j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论