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 相关文章推荐
Javascript 键盘事件的组合使用实现代码
May 04 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
在JavaScript中访问字符串的子串
Jul 07 Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 Javascript
js 动态给元素添加、移除事件的实现方法
Jul 19 Javascript
浅析如何利用JavaScript进行语音识别
Oct 27 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
setTimeout学习小结
Feb 08 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
vue@cli3项目模板怎么使用public目录下的静态文件
Jul 07 Javascript
vscode中Vue别名路径提示的实现
Jul 31 Javascript
js闭包的9个使用场景
Dec 29 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
给初学PHP的5个入手程序
2006/11/23 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
JavaScript DOM基础
2015/04/13 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
js中url对象化管理分析
2017/12/29 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
python如何读写json数据
2018/03/21 Python
python爬虫实例详解
2018/06/19 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python递归法解决棋盘分割问题
2019/07/17 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
二年级数学教学反思
2014/01/21 职场文书
10的分与合教学反思
2014/04/30 职场文书
岗位工作说明书
2014/07/29 职场文书
小学生通知书评语
2014/12/31 职场文书
求职意向书范本
2015/05/11 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
Python内置的数据类型及使用方法
2022/04/13 Python
Python测试框架pytest高阶用法全面详解
2022/06/01 Python