一、实现类的公有成员:

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);
}
}

转载于:https://blog.51cto.com/4572603/925507

Javascript中公有成员,私有成员,静态成员相关推荐

  1. JavaScript中的私有成员

    JavaScript中的私有成员 Douglas Crockford www.crockford.com 翻译:ShiningRay @ Nirvana Studio JavaScript 是世界上最 ...

  2. C#中访问私有成员技巧

    源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况如果你想知道私有成员的值,甚至去想直接调用类里面的私有方法.那怎么办呢?其实在.net中访问私有 ...

  3. 4)公有成员\私有成员和静态成员

    1)实现类的公有成员.     前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法.         2)实现类的私有成员.     私有成员,即只在类的内部实现中可以共 ...

  4. 在python语言中定义私有成员变量的方法是_Python在类中有“私有”变量吗?

    回答(11) 2 years ago python中的私有变量或多或少是一个hack:解释器故意重命名变量 . class A: def __init__(self): self.__var = 12 ...

  5. 使用Sinon和Rewire对JavaScript中的私有方法进行单元测试

    我们曾经试图遵循良好的编程习惯,在创建和定义方法时尽可能按照"职责单一"和"开放-封闭"原则将那些没有必要暴露出来的方法定义为私有方法,但是在编写测试用例时又往 ...

  6. JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法

    私有函数 构造函数中在定义一个function的时候,在内部只要不以this打头,就是一个俗称的函数体内的局部变量或局部function(js中function即对象)就是私有的. function ...

  7. JavaScript中实现私有属性的写类方式(2)

    上一篇写了个工具函数$class,这篇再完善以下.实现以下功能 1,继承 2,子类继承父类时,不继承父类的私有属性 /*** @param {String} className* @param {St ...

  8. python中用类名访问的方法_对于 Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问 答案:√...

    "华夏"之"华"为的是一()耳:生产也 < p >三.氧气在血中运之主文曰:< / p >也:心氧合血红蛋白 设启显辈可由启显组线性示, ...

  9. JavaScript 私有成员

    Class field declarations for JavaScript(JavaScript 类的字段声明)目前已经进入了 stage-3,其中包含一项 OOP 开发者都很关注的内容:Priv ...

最新文章

  1. 来了解下AbstractList
  2. Geoserver怎样设置地图shp文件为相对路径,可轻松复制移植
  3. webpack.optimize.CommonsChunkPulgin is not a constructor???请看CommonsChunkPlugin VS SplitChunksPlugin
  4. java 拉起服务_技术开发者应该如何构建小团队的微服务方案?
  5. pgsql thinkphp5_thinkphp 连接postgresql
  6. 加密芯片在汽车无钥匙启动行业的应用
  7. VSCode前端文件(html文件)如何以服务器模式打开?
  8. android上ps/grep/kill组合杀死mediaserver/system_server
  9. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
  10. Python:学习笔记之函数的递归
  11. java怎么播放视频_java 播放视频
  12. Chapter 2 大规模MIMO系统信息论基础及信道容量分析
  13. Vivado下载bit文件正常不能在线抓取波形
  14. 计算机病毒及解决方法,3种电脑病毒及解决方法
  15. 数学四大思想八大方法_数学四大思想方法
  16. 自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建
  17. Geos库在Windows上的编译
  18. html控制树莓派小车,用树莓派来制作简单的遥控小车
  19. Enhancing The Reliability of Out-of-distribution Image Detection in Neural Networks解读
  20. css怎么设置图片卷角效果,用css3制作纸张效果(外翻卷角)

热门文章

  1. Python爬虫:scrapy爬取斗鱼直播图片
  2. C#控制台程序输出杨辉三角
  3. 微分几何笔记(7) —— 光滑微分流形
  4. 写一个函数,输入n,求斐波那契数列的第n项。
  5. Python 读书笔记(1)
  6. 区块链学习笔记五 BTC网络
  7. 洛谷P2404 Java解法
  8. 新海诚没有参与制作的作品_超豪华的制作团队只有这一次——新海诚《你的名字》访谈(下)...
  9. illustrator字体设计教程 刘兵克Illustratorai字体设计日记
  10. java计算机毕业设计新疆旅游专列订票系统源码+mysql数据库+lw文档+系统+调试部署