时间:2021-05-28
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]
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
但javascript中并没有类概念,所谓的类也是模拟而来,通过函数加闭包模拟出类成员及私有成员(关于闭包可以参见跨越边界:闭包)。这里我们将用比较平实的方式来
本文实例讲述了JavaScript闭包的功能与用法。分享给大家供大家参考,具体如下:理解闭包关键是理解JS的对象的本质以及垃圾收集机制。函数也是对象,也有属性,
相关阅读:谈谈我对JavaScript原型和闭包系列理解(随手笔记8)谈谈我对JavaScript原型和闭包系列理解(随手笔记9)什么是闭包闭包是什么?闭包是C
前言:还是一篇入门文章。Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包对于那些使用传统静态语言C/C++的程序员来说是一个新的
Javascript闭包闭包,是Javascript比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,