闭包实现私有属性

2018-10-17  本文已影响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
成功。

上一篇下一篇

猜你喜欢

热点阅读