搜索
您的当前位置:首页正文

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));
    }
  }
}
Top