JavaScript面向对象程序设计-封装继承多态.doc

JavaScript面向对象程序设计-封装继承多态.doc

ID:56279108

大小:104.50 KB

页数:26页

时间:2020-06-05

JavaScript面向对象程序设计-封装继承多态.doc_第1页
JavaScript面向对象程序设计-封装继承多态.doc_第2页
JavaScript面向对象程序设计-封装继承多态.doc_第3页
JavaScript面向对象程序设计-封装继承多态.doc_第4页
JavaScript面向对象程序设计-封装继承多态.doc_第5页
资源描述:

《JavaScript面向对象程序设计-封装继承多态.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、JavaScript面向对象程序设计(上)——封装JavaScript是一种非常灵活的面向对象程序设计语言,它与传统的强类型的面向对象程序设计语言(如C++,Java,C#等)有很大不同,所以要实现如C++、java、C#当中的一些特性就需要换一种思考方式来解决。今天主要讨论如何在JavaScript脚本中实现数据的封装(encapsulation)。数据封装说的简单点就是把不希望调用者看见的内容隐藏起来。它是面向对象程序设计的三要素之首,其它两个是继承和多态,关于它们的内容在后面再讨论。关于数据封装的实现,在C++、Java、C#等语言中是通过public、private、static等

2、关键字实现的。在JavaScript则采用了另外一种截然不同的形式。在讨论如何具体实现某种方式的数据封装前,我们先说几个简单的,大家所熟知却又容易忽略的JavaScript的概念。1几个基本概念1.1变量定义在JavaScript语言中,是通过var关键字来定义变量的。但是如果我们直接给一个没有使用var定义的变量赋值,那么这个变量就会成为全局变量。一般情况下,我们应该避免使用没有用var定义的变量,主要原因是它会影响程序的执行效率,因为存取全局变量速度比局部变量要慢得多。但是这种用法可以保证我们的变量一定是全局变量。另外,为了保证速度,我们在使用全局变量时,可以通过var定义一个局部变量

3、,然后将全局变量赋予之,由此可以得到一个全局变量的局部引用。1.2变量类型没有定义的变量,类型为undefined。变量的值可以是函数。函数在JavaScript中可以充当类的角色。1.3变量作用域变量作用域是指变量生存周期的有效范围。单纯用{}创建的块不能创建作用域。with将它包含的对象作用域添加到当前作用域链中,但with不创建新的作用域。with块结束后,会将对象作用域从当前作用域链中删除。try-catch中,catch的错误对象只在catch块中有效,但catch块中定义的变量属于当前作用域。其它如if、for、for-in、while、do-while、switch等控制语句

4、创建的块不能创建作用域。用function创建的函数,会创建一个新的作用域添加到当前作用域中。2封装下面我们就来讨论具体的封装。首先说一下大家最熟悉的几种封装:私有实例成员、公有实例成员和公有静态成员。最后会讨论一下大家所不熟悉的私有静态成员和静态类的封装办法。因为下面要讨论的是面向对象编程,所有当函数作为类来定义和使用时,我们暂且将其成为类。2.1私有实例成员私有实例成员在JavaScript中实际上可以用函数内的局部变量来实现,它相当于类的私有实例成员。例如:1.class1=function(){2.  //privatefields3.  var m_first=1;4.  var

5、 m_second=2;5.  //privatemethods6.  function method1(){7.    alert(m_first);8.  }9.  var method2=function(){10.    alert(m_second);11.  }12.  //constructor13.  {1.    method1();2.    method2();3.  }4.}5.var o=newclass1();6.//error7.alert(o.m_first);8.o.method1();这里m_first和m_second是class1的两个私有实例字段,

6、method1和method2是两个私有实例方法。他们只能在该类的对象内部被使用,在对象外无法使用。这里大家会发现创建私有方法有两种方式,一种是直接在类中定义方法,另一种是先定义一个局部变量(私有实例字段),然后定义一个匿名方法赋值给它。直接在类中定义方法,则该方法的作用域就是这个类,因此这个方法在此类外不能够被访问,而它又可以存取类中所有的私有实例字段,这就保证了这是个私有实例方法。第二种创建私有实例方法的方式跟第一种方式的效果是一样的,但是第二种方式更灵活一些。你应该还会注意到,class1中把构造器代码用{}括起来了,这样做虽然没有必要,但是代码看上去更加清晰。关于这段构造器代码,还

7、有两点需要说明的地方:1、构造器代码必须放在整个类定义的最后,这样做是为了保证在它当中被调用的方法都已经被定义了。因为JavaScript是解释型语言,所以,它会按照从上到下的顺序执行,因此,如果构造器代码放在其它方法定义的前面,则执行到调用语句时找不到要调用的方法,就会出错。2、我们已经知道{}创建的块不会改变作用域,因此如果在这样的构造器代码中创建局部变量,实际上是在整个类中创建私有实例成员,所以,如果需要用到局部变

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。