预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

JavaScript面向对象编程,第一部分:继承 作者:lzlhero<lzlhero_at_eyou.com>发布:heiyeluren<heiyeluren_at_gmail.com>时间:2005-08-25 我们将向你展示JavaScript如何实现面向对象的语言中的:继承.同时,这些例子将向你展示如何实现类的封装.在此,我们不会讨论多态实现. 虽然JavaScript是脚本语言,但它所支持的面向对象编程也是非常强大的.虽然它没有类和实例,但它有对象,原型和隐式的继承.我们将会解释如何模拟继承及其超类与子类之间关系的形式.原型是理解继承概念的关键,我们将会教你如何建立原型,如何检测一个对象是否是另外一个对象的原型,及其JavaScript的模型与Java面向对象编程之间的区别.我们同样会向你展示如何检测对象所包含的各种属性的方法.在另外一篇文章里,我还会详细地讲解有关"原型链(prototypechain)"的知识. 本文大量地参考了Webreference.com中"Object-OrientedProgrammingwithJavaScript,PartI:Inheritance"的内容,许多内容我进行了详细的测试和再探讨,以保证内容不会有太大的失误.原文地址:HYPERLINK"http://www.webreference.com/js/column79/"http://www.webreference.com/js/column79/ 面向对象语言的特点 面向对象设计是基于以下3个主要原理的:封装,继承和多态.说某种程序语言是支持OO(面向对象)设计的,只有在它的语法中支持以上3个概念才可以这么说.这种语言应该为你提供某些方法,以使你能很轻松地定义和使用这些范例.封装涉及到了将某个对象变成一个"黑盒子"的概念.当你使用某个对象时,你不用知道它内部是如何工作的,你也不必理解对象是如何工作的.这个对象只需将它绝对有用的信息以接口方式提供出来.此对象应该给你提供友好的接口,来让你可以使用其有限的属性集和方法集.封装还有一层意思,那就是说某个对象包含了它需要的每一样东西,这包括数据和对于它的操作.封装的概念非常的强大,因为它允许将一个大的软件项目有效地分配给每个开发人员,对于团队中的每个人,他们只需要关注自己所实现的对象,而不需要太多地关注于别人的实现.开发项目中的开销使得开发团队中成员与接口的数量按指数级别增长.封装是自"软件危机"以来最受欢迎的OO设计理念. 软件的复用是OO设计思想中另外一个重要的特点.在软件体系中实现此思想的主要方法就是继承.类就是定义对象的功能.超类是某个新类,或者说是子类被建立的来源类.一个子类从它的超类中继承了所的方法和属性.实际上,所有的子类都是被自动地生成的,因此节省了大量的工作.你不需要一个一个地定义这些子类.当然,你可以重载那些继承下来的方法和属性.事实上,谁也没有指出哪个子类要建立得和其超类一模一样,除非你没有重载任何的属性和方法. 多态可能是这个3个概念中最复杂的一个了.其本质上是说,每个对象都可以处理各种不同的数据类型.你不必为处理不同的数据类型而建立不同的类.其典型的例子就是画图的类,你不必为实现画圆,画矩形,画椭圆而编写不同的类.你可以建立一个足够聪明的类来调用特定的方法来操作特定的形状. 通过函数实现继承 虽然JavaScript不支持显示继承操作符,但你可以通过其实方式实现隐式继承.对于实现类的继承,有2种比较常用的方式.第一种将某个类定义成子类的方法是,通过在负责定义子类函数的内部调用超类的构造函数.看下面的示例: //超类构造函数functionsuperClass(){this.bye=superBye;this.hello=superHello;} //子类构造函数functionsubClass(){this.inheritFrom=superClass;this.inheritFrom();this.bye=subBye;} functionsuperHello(){return"HellofromsuperClass";}functionsuperBye(){return"ByefromsuperClass";} functionsubBye(){return"ByefromsubClass";} //测试构造特性的函数functionprintSub(){varnewClass=newsubClass();alert(newClass.bye());alert(newClass.hello());} 当你运行上面的printSub函数时,它会依次执行subBuy和superHello函数.我们可以看到,bye和hello方法最先在superCl