先看我的代码:var Obj = {
i : 1,
getI : function(){
return this.i;
},
getIAdd1 : function(){
return this.i + 1;
}
};
Obj.i = 2;
alert(Obj.getIAdd1());
想让Obj里面的i属性不被外界访问到,但是内部那两个函数要用到i,代码该怎么改。这就是js闭包的问题吗?
万分感谢!javascript闭包?

解决方案 »

  1.   

    我是想让 
    Obj.i = 2; 这句出错
    alert(Obj.getIAdd1()); 这句能弹出2现在的结果是 弹出了 3
      

  2.   

    function Test(){
    var i=1;
    this.getI=function(){
    return i;
    }
    this.getIAdd=function(){
    return i+1;
    }
    }
    var o=new Test();
    o.i=2;
    alert(o.getI());
    alert(o.getIAdd());
    这样试试
      

  3.   

    这个是可以实现,但是这个Obj必须是已经实体化的对象。不然每次new一下i的值都会重置。
    谢谢你的回复~ 
      

  4.   


    解决了! 看到三楼的代码突然有了灵感~
    var Obj = new function(){
    var i = 1;
    this.getI = function(){
    return i;
    };
    this.getIAdd1 = function(){
    i ++;
    return i;
    };
    }(); Obj.i = 2;
    alert(Obj.getIAdd1());
    alert(Obj.getIAdd1());
    alert(Obj.getIAdd1());
    测试代码弹出的是2、3、4、5
    Obj.i = 2;不会影响到内部的i的值
    实际上Obj既然已经是个对象而非定义语句,那么Obj.i = 2;是绝对不会报错的。2楼我小白了一把~