没有合适的资源?快使用搜索试试~ 我知道了~
首页JavaScript 面向对象编程详细讲解文档
JavaScript 面向对象编程详细讲解文档
4星 · 超过85%的资源 需积分: 10 7 下载量 85 浏览量
更新于2023-03-03
评论
收藏 76KB DOC 举报
虽然 JavaScript 是脚本语言, 但它所支持的面向对象编程也是非常强大的。虽然它没有类和实例, 但它有对象, 原型和隐式的继承。我们将会解释如何模拟继承及其超类与子类之间关系的形式。原型是理解继承概念的关键, 我们将会教你如何建立原型, 如何检测一个对象是否是另外一个对象的原型, 及其 JavaScript 的模型与Java 面向对象编程之间的区别。我们同样会向你展示如何检测对象所包含的各种属性的方法。在另外一篇文章里, 我还会详细地讲解有关 "原型链 (prototype chain)" 的知识。
资源详情
资源评论
资源推荐
命名空间
在引入命名空间之前,一个令开发人员头疼的问题就是如何防止函数名/类名和其他人的冲突,
在一个公司内部项目组之间可以通过命名预定(比如加前缀等)解决这个问题,但是把视线放
到整个软件开发领域,在当今协作开发相当盛行的时代,这个问题却依然存在。在使用多个第
三方框架或类库的时候,你唯一能作的就是祈祷它们的命名不要冲突,如果真正发生这种灾难
的话,你唯一能作的就是放弃其中一个。命名空间的引入相当程度上解决了这个问题。
从事 Web 开发不可避免要接触 JavaScript,目前最新版本的 JavaScript 还是不支持命名空间,
所以命名冲突的问题凸显无疑,想象一下你引用了两个 js 文件,却发现由于命名问题导致你不
得不放弃其中一个,从而导致多写了许多代码,无疑是十分令人沮丧的。在 JavaScript 新版本
引入命名空间概念之前,发扬自立更生精神和创造性是我们程序员的基本义务。
实现前提:与 Java、C#等语言不同,JavaScript 中的类并不是对象的定义,事实上 JavaScript
中并不存在真正的类,这里的类实际上是用函数模拟实现的,而 JavaScript 中的函数实际上是
一个对象,因此在 JavaScript 中:一个类就是一个对象。这和传统概念概念极为不同,在
JavaScript 中,创建某个类的实例实际上就是将类(=对象,记住)复制了一份。看到这里,有
点设计模式概念的应该就可以看出来了,在 JavaScript 中,类机制使用了原型( prototype ) 模
式。
实现原理:既然看清楚了类的本质,那么问题就简单了,如果将oa项目组所有JS类和函数
作为属性放在名为oa的对象里面,然后将oa对象以属性的方式放在名为ezone对象里面不就
可以达到我们的目的,比如ezone.oa.Person实际上是在ezone对象的属性oa(也是一个对
象)中的类Person(还是一个对象)。
实现非常简单,整个命名空间机制的实现不超过20行代码,分析如下:
//声明一个全局对象Namespace,用来注册命名空间
Namespace=newObject();
//全局对象仅仅存在register函数,参数为名称空间全路径,如"Grandsoft.GEA"
Namespace.register=function(fullNS)
{
//将命名空间切成N部分,比如Grandsoft、GEA等
varnsArray=fullNS.split('.');
varsEval="";
varsNS="";
for(vari=0;i<nsArray.length;i++)
{
if(i!=0)sNS+=".";
sNS+=nsArray[i];
//依次创建构造命名空间对象(假如不存在的话)的语句
//比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去
sEval+="if(typeof("+sNS+")=='undefined')"+sNS+"=newObject();"
}
if(sEval!="")eval(sEval);
}
上面就是在 JavaScript 中模拟命名空间机制的完整实现,使用方式如下:
/注册命名空间ezone.oa
Namespace.register("ezone.oa");
//在Grandsoft.GEA命名空间里面声明类Person
ezone.oa.Person=function(name,age)
{
this.name=name;
this.age=age;
}
//给类Person添加一个公共方法show()
ezone.oa.Person.prototype.show=function()
{
alert(this.name+"is"+this.age+"yearsold!");
}
//演示如何使用类Person
varp=newezone.oa.Person("lf800",21);
p.show();
继承
JavaScript 面向对象编程, 第一部分: 继承
我们将向你展示 JavaScript 如何实现面向对象的语言中的: 继承. 同时, 这些例子将向你展示
如何实现类的封装. 在此, 我们不会讨论多态实现。
虽然 JavaScript 是脚本语言, 但它所支持的面向对象编程也是非常强大的。虽然它没有类和
实例, 但它有对象, 原型和隐式的继承。我们将会解释如何模拟继承及其超类与子类之间关系的
形式。原型是理解继承概念的关键, 我们将会教你如何建立原型, 如何检测一个对象是否是另外
一个对象的原型, 及其 JavaScript 的模型与Java 面向对象编程之间的区别。我们同样会向你展
示如何检测对象所包含的各种属性的方法。在另外一篇文章里, 我还会详细地讲解有关 "原型
链 (prototype chain)" 的知识。
本文大量地参考了 Webreference.com 中 "Object-Oriented Programming with JavaScript,
Part I: Inheritance" 的内容, 许多内容我进行了详细的测试和再探讨, 以保证内容不会有太大的
失误.
原文地址: http://www.webreference.com/js/column79/
面向对象语言的特点
面向对象设计是基于以下 3 个主要原理的: 封装, 继承和多态。说某种程序语言是支持 OO
(面向对象) 设计的, 只有在它的语法中支持以上 3 个概念才可以这么说. 这种语言应该为你提供
某些方法, 以使你能很轻松地定义和使用这些范例. 封装涉及到了将某个对象变成一个 "黑盒
子"的概念。当你使用某个对象时, 你不用知道它内部是如何工作的, 你也不必理解对象是如何
工作的. 这个对象只需将它绝对有用的信息以接口方式提供出来。此对象应该给你提供友好的
接口, 来让你可以使用其有限的属性集和方法集。封装还有一层意思, 那就是说某个对象包含了
它需要的每一样东西, 这包括数据和对于它的操作。封装的概念非常的强大, 因为它允许将一个
大的软件项目有效地分配给每个开发人员, 对于团队中的每个人, 他们只需要关注自己所实现的
对象, 而不需要太多地关注于别人的实现。开发项目中的开销使得开发团队中成员与接口的数
量按指数级别增长。封装是自 "软件危机" 以来最受欢迎的 OO 设计理念。
软件的复用是 OO 设计思想中另外一个重要的特点。在软件体系中实现此思想的主要方法就
是继承。类就是定义对象的功能。超类是某个新类, 或者说是子类被建立的来源类. 一个子类从
它的超类中继承了所的方法和属性. 实际上, 所有的子类都是被自动地生成的, 因此节省了大量
的工作. 你不需要一个一个地定义这些子类. 当然, 你可以重载那些继承下来的方法和属性. 事实
上, 谁也没有指出哪个子类要建立得和其超类一模一样, 除非你没有重载任何的属性和方法.
多态可能是这个 3 个概念中最复杂的一个了. 其本质上是说, 每个对象都可以处理各种不同的
数据类型. 你不必为处理不同的数据类型而建立不同的类. 其典型的例子就是画图的类, 你不必
为实现画圆, 画矩形, 画椭圆而编写不同的类. 你可以建立一个足够聪明的类来调用特定的方法
来操作特定的形状.
通过函数实现继承
虽然 JavaScript 不支持显示继承操作符, 但你可以通过其实方式实现隐式继承. 对于实现类的
继承, 有 2 种比较常用的方式. 第一种将某个类定义成子类的方法是, 通过在负责定义子类函数
的内部调用超类的构造函数. 看下面的示例:
// 超类构造函数
function superClass() {
this.bye = function() {
return "Bye from superClass";
};
this.hello = function () {
return "Hello from superClass";
};
}
// 子类构造函数
function subClass() {
this.inheritFrom = superClass;
this.inheritFrom();
this.bye = function() {
剩余12页未读,继续阅读
JoJooo
- 粉丝: 7
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1