美文网首页
闭包实现私有属性

闭包实现私有属性

作者: 许先森的许 | 来源:发表于2018-10-17 14:54 被阅读17次
     var Counter = function(){
      var privateCounter = 0;
      function changeBy(val){
        privateCounter += val;
      }
      
      return {
        increment:function(){
          changeBy(1);
        },
        decrement:function(){
          changeBy(-1);
        },
        value:function(){
          return privateCounter;
        }
      };
    }; 
    
    console.log(Counter);
    

    ƒ (){
    var privateCounter = 0;
    function changeBy(val){
    privateCounter += val;
    }
    return {
    increment:function(){
    changeBy(1);
    },
    decrement:function(){
    changeBy(-1);

    console.log(Counter())
    

    {increment: ƒ, decrement: ƒ, value: ƒ}

    console.log(Counter().value)
    

    ƒ (){
    return privateCounter;
    }

    console.log(Counter().increment())
    console.log(Counter().value())
    

    0
    因为这里每次都是一个新的对象来调用方法,所以value并没有被加1,我们要如下写法,把Counter直接定义为一个json对象:这个对象中有三个属性,属性值都是方法,并且都是在操作privateCounter属性,所以达到了私有属性的效果。

    var Counter = function(){
          var privateCounter =0;
          function changeBy(val){
              privateCounter += val;
          }
          return {
              increment:function(){
                  changeBy(1);
              },
              decrement:function(){
                  changeBy(-1);
              },
              value:function(){
                  return privateCounter;
              }
        };
     }();
    
    console.log(Counter)
    

    {increment: ƒ, decrement: ƒ, value: ƒ}

    console.log(Counter.increment())
    

    undefined

    console.log(Counter.value())
    

    1
    成功。

    相关文章

      网友评论

          本文标题:闭包实现私有属性

          本文链接:https://www.haomeiwen.com/subject/wdfrzftx.html