作家
登录

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

作者: 来源:www.28hudong.com 2013-03-30 00:36:43 阅读 我要评论

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]

  推荐阅读

  jquery $.getJSON()跨域请求

1,同一域名下和其他的请求可以是一样的 js: 复制代码 代码如下: var url="http://localhost:2589/a.ashx"; $(function(){ $.getJSON(url,function(data){ alert (data.Name); }) }); 服务器返回字符串: {"Name">>>详细阅读


本文标题:javaScript 利用闭包模拟对象的私有属性

地址:http://www.17bianji.com/kaifa2/JS/23798.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)