闭包实现私有属性

 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
成功。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,230评论 0赞 2
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,690评论 0赞 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,197评论 19赞 139
  • 清平乐·红笺小字 宋:晏殊 红笺小字。 说尽平生意。 鸿雁在云鱼在水。 惆怅此情难寄。 斜阳独倚西楼。 遥山恰对帘...
    九歌啊阅读 741评论 0赞 4
  • 2017年10月,你来到我的身边,那时候只有一粒绿豆那么大。 2017年12月,第一次排畸。嗯,你很好。 2017...
    肉包包了阅读 305评论 0赞 0

友情链接更多精彩内容