| 特权 特权方法可以访问私有变量和方法,并且其自身对于公共方法和对象外部都是可访问地。可以删除或者替换一个特权方法,但是不能改变它,或者强迫它泄密。 特权方法是在构造函数内使用 this 指定地。 function Container(param) {
 function dec() {
 if (secret > 0) {
 secret -= 1;
 return true;
 } else {
 return false;
 }
 }
 
 this.member = param;
 var secret = 3;
 var that = this;
 
 this.service = function () {
 if (dec()) {
 return that.member;
 } else {
 return null;
 }
 };
 }
 service 就是特权方法。前三次调用 myContainer.service() 时会返回 ‘abc’。之后返回空(null)。service 调用了可访问私有变量 secret 的私有方法 dec。service 对其他对象和方法都是可见的,但是不能直接访问私有成员。 闭包 由于 Javascript 有闭包,因此这种公共,私有和特权成员模型时可以的。这意味着内部函数总是可以访问它外部函数的变量和参数,甚至在外部函数返回后也可以。这是这个语言一个非常有用的特性。目前没有任何关于 Javascript 编程的书描述了如何利用它。大部分甚至都不提及它。(糖伴西红柿说,这是2001年的文章,当时估计还没有这方面的研究文章。现在来说,犀牛书等都有涉及,javascript 的难点之一啊。) 私有和特权成员只在对象被创建时生成。公共成员可以随时添加。 模式 公共 function Constructor(...) {
 this.membername = value;
 
 }
 Constructor.prototype.membername = value;
 私有 function Constructor(...) {
 var that = this;
 var membername = value;
 
 function membername(...) {...}
 
 }
 注意:函数语句 function membername(...) {...} 是 var membername = function membername(...) {...}; 的缩写。 特权 function Constructor(...) {
 this.membername = function (...) {...};
 
 }
 糖伴西红柿说: 好久没露面,本来就没人记得我,这次更无名了。最近从高丽迁移回了天朝,嗯。而且正在为了工作进行最后的充电活动。生活中同时也遭遇到电视剧情节,还是高丽电视剧。这两天在主攻 Javascript 中几个比较难的知识点,闭包算是其中之一。两天看了好多关于闭包的文章,才有点开窍,这篇文章属于其中之一。算是个额外的参考资料,主要的是另一篇英文文章,有打算全篇翻译。 原文地址:http://www.crockford.com/javascript/private.html本文链接:http://www.blueidea.com/tech/web/2009/6538.asp译文地址:http://www.qianduan.net/?p=6580
   出处:前端观察
责任编辑:bluehearts
 上一页 JavaScript的私有成员 [1] 下一页 ◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
	      |