js单例模式

单例模式

单例表示只存在一个这样的对象。单例模式是一种非常重要的设计模式,有很多经典的应用场景,比如说,网站的登录用户对象应当是单例的,用户在登录过程中,不应该创建两个相同的用户对象。

IIFE实现

单例模式最简单的实现方案就是全局变量,不用通过函数调用来返回对象,不用构造器来生成对象,这样的对象天生就是单例。更好的方法是,我们用函数来生成单例。

function User(name){
  return {name:name}
}

我们首先创建一个返回用户对象的函数,这个函数并不能保证单例,因为每次调用这个函数返回的对象都是不同的。

var singleUser = (function(){
  var result;
  return function(name){
    return result || (result = {name:name})
  }
})();
console.log(singleUser("tom").name)   //tom
console.log(singleUser("jack").name)   //tom

这里我们使用了IIFE来实现了单例模式,我们在IIFE中设置了result变量,并返回一个可以引用到result变量的函数,当第一次创建单例时,result被初始化,之后如果又试图创建的时候,直接返回result。这样就能够成功的保证单例

正交化设计

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

推荐阅读更多精彩内容

  • 1. 常见实现单例 要实现一个标准的单例模式并不复杂,无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是...
    rocneal阅读 1,325评论 0 0
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,298评论 4 34
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 请问,"男怕入错行,女怕嫁错郎"这句话是谁说的?出来我保证不打死他!谁说女的就不怕入错行了!哎你说什么?问我为什么...
    ff98c39fe623阅读 4,149评论 0 3