JavaScript的public、private和privileged模式 原文:Private Members in JavaScript?? 本文从这里转载,所有版权归原作者所有 ? 公共/私有变量和方法 另外注意下这种写法: var 函数名=function 函数名(){...} 这个函数被调用时具有特权函数和私有函数的特性。 ? 例: ? ? ?? Java代码 ? ? ? Java代码 ? ? ? Java代码 ? ? ? ? ? Java代码 ? ? ? ? ? ? ? ? ? ? ? ? ? Java代码
JavaScript是世界上最被误解的编程语言。有人认为它缺少信息隐藏的特性,因为JavaScript对象不能拥有私有变量的方法。?
但是这是个误解。JavaScript对象可以拥有私有成员。?
对象?
JavaScript从根本上就是关于对象的。数组是对象,方法是对象,Object也是对象。什么是对象?对象就是键值对的集合。键是字符串,?
值可以是字符串,数字,布尔和对象(包括数组和方法)。对象通常被实现为Hashtable,这样值就可以被快速获取。?
如果值是一个函数,我可以称其为方法。当对象的方法被调用时,“this”变量则被赋予该对象。方法可以通过“this”变量访问实例?
变量。?
对象可以由初始化对象的方法?--?构造函数产生。构造函数提供在其他编程语言中类提供的特性,包括静态变量和方法。?
Public?
对象的成员都是public成员。任何对象都可以访问,修改,删除这些成员或添加新成员。主要有两种方式来在一个新对象里放置成员:
在构造函数里?
这种技术通常用来初始化public实例变量。构造函数的“this”变量用来给对象添加成员。
这样,如果我们构造一个新对象var myContainer = new Container('abc'),则myContainer.member为'abc'。?
在prototype里?
这种技术通常用来添加public方法。当寻找一个成员并且它不在对象本身里时,则从对象的构造函数的prototype成员里找。?
prototype机制用来做继承。为了添加一个方法到构造函数创建的所有对象里,只需添加到构造函数的prototype:
这样,我们可以调用该方法myContainer.stamp('def'),结果为'abcdef'。?
Private?
private成员由构造函数产生。普通的var变量和构造函数的参数都称为private成员。
该构造函数创建了3个private实例变量: param,secret和that。它们被添加到对象中,但是不能被外部访问,也不能被该对象自己的
public方法访问。它们只能由private方法访问。private方法是构造函数的内部方法。
private方法dec检查secret实例变量。如果它大于0,则减少secret并返回true,否则返回false。它可以用来让这个对象限制用3次。
按照惯例,我们定义一个private的that变量。这用来让private方法可以使用本对象。这样做是因为ECMAScript语言规范有一个错误,?
该错误导致不能正确的设置this给内部方法。?
private方法不能被public方法调用。为了让private方法有用,我们需要引入privileged方法。?
Privileged?
privileged方法可以访问private变量和方法,并且它本身可以被public方法和外界访问。可以删除或替代privileged方法,但是不能
更改它或强制它泄露自己的秘密。?
privileged方法在构造函数里用this分配。
详细解决方案
JavaScript的public、private跟privileged模式
热度:560 发布时间:2012-10-26 10:30:59.0
通过一个简单的的例子,来展示如何使用JavaScript在类里面创建私有变量和方法
?
Summary
相关解决方案
- javascript ie6兼容的有关问题
- javascript window open在ie中设立不起作用,求解决
- javascript 字符串拼接效率有关问题
- JavaScript 自动生成图片并合并有关问题
- 不走"<script type='text/javascript'>"标签咋回事
- <script type="javascript/text">的有关问题
- 用servlet+jsp+javascript+jdbc做个简单的办公自动化系统流程,该如何解决
- 怎么打开 javascript:SetData(2010,5,10)
- javaScript = == ===区别,该怎么解决
- javascript 怎么验证name=xx.xx的radio表单
- form action 和 javascript 的提交問題解决方法
- javascript,该怎么处理
- javascript,该如何处理
- javascript 选中文字 但是保存样式 标签
- 新人求问,J2EE方向,html,css,javascript,vml要学到什么程度?解决思路
- javascript 请求servlet兑现将函数中定义的变量作为参数
- javascript 不懂,该如何处理
- javascript 不懂解决方法
- JavaScript 大局函数求实例,高分求
- javaScript 里面 如何知道Object 对象的长度
- javascript 函数调用有什么有关问题,请
- javascript 中文本框中数字如何比较
- javascript IE通过,火狐,google浏览器不过解决思路
- public final static day解决方案
- javascript rsa加密/java使用Cipher.getInstance("RSA/ECB/PKCS1Padding")解密,该如何处理
- IE javascript start()函数解决方案
- 为啥在 构造函数中不能定义 private 的数据
- The public type MyPanel must be defined in its own file,该如何处理
- private Set<Role> roles = new HashSet<Role>(0); 解释一上用法
- error C2059: syntax error : 'public'该怎么解决