Javascript中公有成员,私有成员,静态成员
来源:互联网 发布:设备通讯端口 英文 编辑:程序博客网 时间:2024/06/04 07:27
Javascript中公有成员,私有成员,静态成员
一、实现类的公有成员:
1) 定义的成员属性和方法能够被任何实例访问,对任何的实例都是公开的,成为公有成员。在javascript中,一般的属性和方法的定义都是公有的,请看下面的例子:function class1(){
this.prop=1;
this.showProp();
}
//创建一个类的实例
var obj1=new class1();
class1.prototype.showProp=function(){
alert(this.prop);
}
2) 以上class1中的属性,方法都是公共的,属于任何实例对象。
二、实现类的私有成员:
1) 私有成员即是在内部实现中可以共享的成员,但是并不对外公开。Javascript中并没有特殊的机制来实现私有成员,但是可以用一些技巧来实现这个功能。
2) 这个技巧主要是通过变量的作用域性质来实现的,在Javascript中,一个函数内部定义的变量称为局部变量,该变量不是被函数外的程序访问,却可以被函数内部定义的嵌套函数访问。在实现私有成员的过程中,正是利用了这一性质。
3) 在类的构造函数中可以为类添加成员,通过这种方式来定义类的成员,实际上共享了构造函数内部定义的局部变量,这些变量就可以看作为类的私有成员,例如:
function class1(){
var pp=”this is a private property”; //私有属性成员pp,
function pm(){ //私有方法成员,显示pp的值
alert(pp);
}
this.method1=function(){
//在公有成员中改变私有属性的值
pp=”pp has bean changed”;
}
this.method2=function(){
pm(); //在公有成员中调用私有方法。
}
}
var obj1=new class1();
obj1.method1();
obj2.method2();
4) 这样,就实现了私有属性pp和私有方法pm。运行完class1以后,尽管看上去pp和pm这些局部变量应该随即消失,但实际上因为class1是通过new来运行的,它所属的对象还没有消失,所以仍然可以通过公开成员来对他们进行操作。
5) 要使用私有成员,是以牺牲代码的可读性为代价的。而且这种实现更多的是一样Javascript技巧,看上去也比较勉强,因为它并不是语言本身具有的机制。但种利用变量作用域性质的技巧,却是值得借鉴的。
三、实现类的静态成员:
1) 和私有成员的勉强相比,静态成员显得“正统”的多。静态成员属于一个类的成员,它可以通过“类名.静态成员名”的方式访问。在javascript中,可以给一个函数对象直接添加成员实现静态成员,因为函数也是一个对象,所以对象的相关操作,对函数同样适用。例如:
function class1(){//构造函数
}
//静态属性
class1.staticProperty=”sample”;
//静态方法
class1.staticMethod=function(){
alert(class1.staticProperty);
}
//调用静态方法
class1.staticMethod();
2) 通过上面的代码,就为类class1添加了一个静态属性和静态方法,并且在静态方法中引用了该类的静态属性。
3) 如果要给每个函数对象对添加通用的静态方法,还可以通过函数对象所对应的类function来实现,例如:
//给类Function添加原型方法:showArgsCount
Function.prototype.showArgsCount=function(){
alert(this.length); //显示函数定义的形参的个数
}
function class1(a){
//定义一个类
}
//调用通过Function的property定义的类的静态方法showArgsCount
class1.showArgsCount();
4) 由此可见,通过Function的property原型对象,可以给任何函数都加上通用的静态成员,这在实际中可起到很大的作用,比如在著名的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){
_mehtod.call(object,event||window.event);
}
}
- Javascript中公有成员,私有成员,静态成员
- JavaScript中的公有成员,私有成员和静态成员
- JavaScript中的公有成员,私有成员和静态成员
- js oop中的公有成员、私有成员和静态成员
- Javascript构造函数,公有,私有特权和静态成员
- javascript构造函数中的公有,私有,特权和静态成员
- 【javascript】公有(特权)成员和私有成员
- 公有派生的公有成员、保护成员和私有成员
- javascript 创建私有成员和静态私有成员
- 再探私有/公有静态成员变量与私有静态成员方法
- 再探私有/公有静态成员变量与私有静态成员方法
- iOS公有、保护、私有成员
- C++成员:公有,私有,保护
- javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
- JS中的公有,私有,特权和静态成员
- javascript读书笔记3----实现公有和私有成员
- 私有静态成员变量
- 私有静态成员变量
- 彻底解决Tomcat 5 下文字乱码问题
- 多文件上传(动态增加 FileUpload)
- FreeBSD下使用Port安装Postfix反垃圾、病毒邮件系统 For MySQL
- Windows下多线程编程技术及其实现
- 用图片实现滚动条样式
- Javascript中公有成员,私有成员,静态成员
- SOLARIS操作系统常用命令
- Symbian 各种资源的定义
- [wayfarer]PetShop的系统架构设计
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
- 好书征集译者(第4期)
- VPN身份认证协议(PAP,SPA,CHAP,MS-CHAP,EAP)大阅兵
- Axis技术文档
- Ubuntu下的inittab文件在哪呢?