小编典典

在 JavaScript 中实现单例的最简单/最干净的方法

all


阅读 70

收藏
2022-03-23

共1个答案

小编典典

我认为最简单的方法是声明一个简单的对象文字:

var myInstance = {
  method1: function () {
    // ...
  },
  method2: function () {
    // ...
  }
};

如果你想要你的单例实例上的私有成员,你可以这样做:

var myInstance = (function() {
  var privateVar = '';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // All private members are accessible here
    },
    publicMethod2: function () {
    }
  };
})();

这被称为 模块 模式,它基本上允许您通过使用闭包将私有成员封装在对象上。

如果你想阻止修改单例对象,你可以 冻结它 ,使用
ES5Object.freeze方法。

这将使对象不可变,防止对其结构和值进行任何修改。

如果你使用 ES6,你可以很容易地使用 ES 模块 来表示一个单例,你甚至可以通过在 模块范围内 声明变量来保持 私有状态 : __

// my-singleton.js
const somePrivateState = []

function privateFn () {
  // ...
}

export default {
  method1() {
    // ...
  },
  method2() {
    // ...
  }
}

然后你可以简单地导入单例对象来使用它:

import myInstance from './my-singleton.js'
// ...
2022-03-23