JavaScript的单例模式 (singleton in Javascript)

  单例模式的基本结构:

  

复制代码 代码如下:

  MyNamespace.Singleton = function() {

  return {};

  }();

  比如:

  

复制代码 代码如下:

  MyNamespace.Singleton = (function() {

  return { // Public members.

  publicAttribute1: true,

  publicAttribute2: 10,

  publicMethod1: function() {

  ...

  },

  publicMethod2: function(args) {

  ...

  }

  };

  })();

  但是,上面的Singleton在代码一加载的时候就已经建立了,怎么延迟加载呢?想象C#里怎么实现单例的:)采用下面这种模式:

  

复制代码 代码如下:

  MyNamespace.Singleton = (function() {

  function constructor() { // All of the normal singleton code goes here.

  ...

  }

  return {

  getInstance: function() {

  // Control code goes here.

  }

  }

  })();

  具体来说,把创建单例的代码放到constructor里,在首次调用的时候再实例化:

  完整的代码如下:

  

复制代码 代码如下:

  MyNamespace.Singleton = (function() {

  var uniqueInstance; // Private attribute that holds the single instance.

  function constructor() { // All of the normal singleton code goes here.

  ...

  }

  return {

  getInstance: function() {

  if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.

  uniqueInstance = constructor();

  }

  return uniqueInstance;

  }

  }

  })();