手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javaScript 利用闭包模拟对象的私有属性
javaScript 利用闭包模拟对象的私有属性
摘要:JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(...

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对传统文档对象模型的支持

谈一谈javascript闭包

JavaScript 预解析的原理及实现

javascript实现带下拉子菜单的导航菜单效果

JavaScript里实用的原生API汇总

javascript动态创建链接的方法

如何遍历对象的属性?

JavaScript中的Math.LN2属性用法详解

JavaScript获得url查询参数的方法

JavaScript Date对象详解

精品推荐
分类导航