AJAX中JavaScript类的三种成员
发布时间:2006-06-19 08:57:01 来源:csdn 网友评论 0 条 实现类的公有成员
前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法。
实现类的私有成员
私有成员即在类的内部实现中可以共享的成员,不对外公开。JavaScript中并没有特殊的机制来定义私有成员,但可以用一些技巧来实现这个功能。
这个技巧主要是通过变量的作用域性质来实现的,在JavaScript中,一个函数内部定义的变量称为局部变量,该变量不能够被此函数外的程序所访问,却可以被函数内部定义的嵌套函数所访问。在实现私有成员的过程中,正是利用了这一性质。
前面提到,在类的构造函数中可以为类添加成员,通过这种方式定义的类成员,实际上共享了在构造函数内部定义的局部变量,这些变量就可以看作类的私有成员,例如:

显示了运行的结果。
这样,就实现了私有属性pp和私有方法pm。运行完class1以后,尽管看上去pp和pm这些局部变量应该随即消失,但实际上因为class1是通过new来运行的,它所属的对象还没消失,所以仍然可以通过公开成员来对它们进行操作。
注意:这些局部变量(私有成员),被所有在构造函数中定义的公有方法所共享,而且仅被在构造函数中定义的公有方法所共享。这意味着,在prototype中定义的类成员将不能访问在构造体中定义的局部变量(私有成员)。
要使用私有成员,是以牺牲代码可读性为代价的。而且这种实现更多的是一种JavaScript技巧,因为它并不是语言本身具有的机制。但这种利用变量作用域性质的技巧,却是值得借鉴的。
实现静态成员
静态成员属于一个类的成员,它可以通过“类名.静态成员名”的方式访问。在JavaScript中,可以给一个函数对象直接添加成员来实现静态成员,因为函数也是一个对象,所以对象的相关操作,对函数同样适用。例如:
通过上面的代码,就为类class1添加了一个静态属性和静态方法,并且在静态方法中引用了该类的静态属性。
如果要给每个函数对象都添加通用的静态方法,还可以通过函数对象所对应的类Function来实现,例如:
由此可见,通过Function的prototype原型对象,可以给任何函数都加上通用的静态成员,这在实际开发中可以起到很大的作用,比如在著名的prototype-1.3.1.js框架中,就给所有的函数定义了以下两个方法:
这两个方法在prototype-1.3.1框架中起了很大的作用,具体含义及用法将在后面章节介绍。
前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法。
实现类的私有成员
私有成员即在类的内部实现中可以共享的成员,不对外公开。JavaScript中并没有特殊的机制来定义私有成员,但可以用一些技巧来实现这个功能。
这个技巧主要是通过变量的作用域性质来实现的,在JavaScript中,一个函数内部定义的变量称为局部变量,该变量不能够被此函数外的程序所访问,却可以被函数内部定义的嵌套函数所访问。在实现私有成员的过程中,正是利用了这一性质。
前面提到,在类的构造函数中可以为类添加成员,通过这种方式定义的类成员,实际上共享了在构造函数内部定义的局部变量,这些变量就可以看作类的私有成员,例如:
| <script language="JavaScript" type="text/javascript"> <!-- function class1(){ var pp=" this is a private property"; //私有属性成员pp function pm(){ //私有方法成员pm,显示pp的值 alert(pp); } this.method1=function(){ //在公有成员中改变私有属性的值 pp="pp has been changed"; } this.method2=function(){ pm(); //在公有成员中调用私有方法 } } var obj1=new class1(); obj1.method1(); //调用公有方法method1 obj1.method2(); //调用公有方法method2 //--> </script> |

显示了运行的结果。
这样,就实现了私有属性pp和私有方法pm。运行完class1以后,尽管看上去pp和pm这些局部变量应该随即消失,但实际上因为class1是通过new来运行的,它所属的对象还没消失,所以仍然可以通过公开成员来对它们进行操作。
注意:这些局部变量(私有成员),被所有在构造函数中定义的公有方法所共享,而且仅被在构造函数中定义的公有方法所共享。这意味着,在prototype中定义的类成员将不能访问在构造体中定义的局部变量(私有成员)。
要使用私有成员,是以牺牲代码可读性为代价的。而且这种实现更多的是一种JavaScript技巧,因为它并不是语言本身具有的机制。但这种利用变量作用域性质的技巧,却是值得借鉴的。
实现静态成员
静态成员属于一个类的成员,它可以通过“类名.静态成员名”的方式访问。在JavaScript中,可以给一个函数对象直接添加成员来实现静态成员,因为函数也是一个对象,所以对象的相关操作,对函数同样适用。例如:
| function class1(){//构造函数 } //静态属性 class1.staticProperty="sample"; //静态方法 class1.staticMethod=function(){ alert(class1.staticProperty); } //调用静态方法 class1.staticMethod(); |
通过上面的代码,就为类class1添加了一个静态属性和静态方法,并且在静态方法中引用了该类的静态属性。
如果要给每个函数对象都添加通用的静态方法,还可以通过函数对象所对应的类Function来实现,例如:
| //给类Function添加原型方法:show ArgsCount Function.prototype.showArgsCount=function(){ alert(this.length); //显示函数定义的形参的个数 } function class1(a){ //定义一个类 } //调用通过Function的prototype定义的类的静态方法showArgsCount class1. showArgsCount (); |
由此可见,通过Function的prototype原型对象,可以给任何函数都加上通用的静态成员,这在实际开发中可以起到很大的作用,比如在著名的prototype-1.3.1.js框架中,就给所有的函数定义了以下两个方法:
| //将函数作为一个对象的方法运行 Function.prototype.bind = function(object) { var __method = this; return function() { __method.apply(object, arguments); } } //将函数作为事件监听器 Function.prototype.bindAsEventListener = function(object) { var __method = this; return function(event) { __method.call(object, event || window.event); } } |
这两个方法在prototype-1.3.1框架中起了很大的作用,具体含义及用法将在后面章节介绍。
相关文章
上一篇文章:VS2005+Crystal Report开发Web应用
下一篇文章:Oracle SQL性能优化系列讲座之一
- 推荐阅讯
- ADO操作数据的几个问题
- 设计模式探索系列之Bridge模式
- WMLScript语法基础
- Borland引入新型架构提升软件系统功能
- AJAX中JavaScript类的三种成员
- 程序员建立商业意识之玩技术与利用技术
- Visual Studio 2005中的新DataSet特性
- Spring中IoC的入门实例
- 固步自封 Borland焉能不败
- 将Oracle 10g内置的安全特性用于PHP
- 阅读排行
- 1..net页面间的参数传递简单实例
- 2.VC++与Matlab混合编程之引擎操作详解
- 3.Oracle数据库数据对象分析
- 4.Eclipse3.2+Tomcat5.5.17+Oracle9配置
- 5.Oracle数据库中索引的维护
- 6.在Oracle的网络结构中解决连接问题
- 7.Oracle数据安全面面观
- 8.Oracle数据库的ORA-00257故障解决过程
- 9.Oracle数据库备份与恢复的三种方法
- 10.Oracle与SQL Server在企业应用中的比较
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
