js 闭包实现单例模式

在学习闭包的时候,想看看闭包如何来实现一个单例模式,可是发现网上百度出来的基本上用闭包实现的单例模式都是错误的,大概都是copy来copy去的吧。下面是自己的实现,大家可根据自己的需求在此基础上变通以满足自己的业务需求。
定义:

    (function  (global){
          function SimpleObj(){
                    var instance = null;
                    return function(){
                           if(instance == null){
                                      instance = {name:'simapleobj'}
                            }
                            return instance;
                  }
           }
           global.getInstance = SimpleObj();
    })(window)

调用:

    getInstance(); //{name: "simapleobj"}
    var a = getInstance();
    console.log(a); //{name: "simapleobj"}
    var b = getInstance();
    console.log(b); //{name: "simapleobj"}
    a.name = 'ACE';
    console.log(a); //{name: "ACE"}
    console.log(b); //{name: "ACE"}
    var c = getInstance();
    console.log(c);//{name: "ACE"}
    getInstance();//{name: "ACE"}
QQ20180302-115554@2x.png

闭包,记住两点:1.函数在当前词法作用域之外执行;2.函数可以记住并访问所在的词法作用域。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,842评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,104评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • One could not count the moons that shimmer on her roofs. ...
    Candy俏丽丽阅读 200评论 0 0
  • 一 “少公子!”“少公子!”“哎哟,少公子,公唤您多时了,您怎还在此处发呆呢?”说话这人名唤安,是少公子姬成的侍童...
    御神木下阅读 1,035评论 17 19