javaScript 利用闭包模拟对象的私有属性


Posted in Javascript onDecember 29, 2011

JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(除了this和argument。内部中的函数中的this指向全局对象,argument指向内部函数的函数参数)。我们可以利用这种属性来模拟面向对象中的私有属性。

var myObject=function(value){ 
var value=value || 0; 
return{ 
increment:function(num){ 
value+=typeof num==='number' ? num : 0; 
}, 
setValue:function(num){ 
value = typeof num==='number' ? num : value; 
}, 
getValue:function(){ 
return value; 
} 
} 
}(10) 
//alert(myObject.getValue()); //10 
myObject.setValue(20); 
//alert(myObject.getValue()); //20 
myObject.increment(5); 
alert(myObject.getValue()); //25

如上例中,myObjeact是匿名函数执行后返回的对象。匿名函数中变量value对于匿名函数外部来说是不可访问的,但对于其内部的函数,是可以访问的,匿名函数执行结束,由于变量value仍被返回的myObject对象所存取,故value所占据的内存并没有被销毁。此时,内部的变量value就如同myObject对象的私有变量一样。
var myObject=function(value){ 
var name='MyObject'; 
return{ 
increment:function(num){ 
value+=typeof num==='number' ? num : 0; 
}, 
setValue:function(num){ 
value = typeof num==='number' ? num : value; 
}, 
getValue:function(){ 
//alert(this); 
return value; 
}, 
getName:function(){ 
return name; 
}, 
setName:function(nameStr){ 
name=nameStr; 
}, 
toString:function(){ 
return '[Object:'+name+']'; 
} 
} 
} 
var obj=myObject(5); 
obj.increment(6); 
//alert(obj.getValue()); // 11 
//alert(obj); //[Object:MyObject] 
obj.setName('temp object 01'); 
alert(obj) //[Object:temp object 01]
Javascript 相关文章推荐
jQuery实现渐变下拉菜单的简单方法
Mar 11 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 Javascript
AngularJS表单和输入验证实例
Nov 02 Javascript
jQuery Chosen通用初始化
Mar 07 Javascript
AngularJS实现select的ng-options功能示例
Jul 12 Javascript
javascript字体颜色控件的开发 JS实现字体控制
Nov 27 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 Javascript
Vue循环中多个input绑定指定v-model实例
Aug 31 Javascript
js+css3实现简单时钟特效
Sep 13 Javascript
JavaScript实现单点登录的示例
Sep 23 Javascript
vue+Element-ui实现分页效果
Nov 15 Javascript
Jquery中删除元素的实现代码
Dec 29 #Javascript
js的表单操作 简单计算器
Dec 29 #Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 #Javascript
JavaScript中两个感叹号的作用说明
Dec 28 #Javascript
javascript (用setTimeout而非setInterval)
Dec 28 #Javascript
js字符编码函数区别分析
Dec 28 #Javascript
javascript获得服务器端控件的ID的实现代码
Dec 28 #Javascript
You might like
最省空间的计数器
2006/10/09 PHP
PHP音乐采集(部分代码)
2007/02/14 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
详解PHP归并排序的实现
2016/10/18 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
Django中提示消息messages的设置方式
2019/11/15 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
业务助理岗位职责
2013/11/18 职场文书
四查四看剖析材料
2014/02/14 职场文书
教师职位说明书
2014/07/29 职场文书
踏青活动策划方案
2014/08/19 职场文书
购房委托书范本
2014/09/18 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
手机被没收的检讨书
2014/10/04 职场文书
目标责任书格式范文
2015/05/11 职场文书
团队拓展训练感想
2015/08/07 职场文书
严以用权学习心得体会
2016/01/12 职场文书