单例模式(Singleton) 指保证一个类仅有一个实例,并提供一个访问它的全局访问点。
优点:
缺点:
全局作用域中的全局变量不是单例模式,全局变量会存在很大的隐患,随着项目的体积和功能日益增大,很容易出现命名冲突、作用域内变量污染和变量覆盖等问题,给开发人员带来很多苦恼。
所以要减少全局变量使用,即使用全局变量也要将污染降到最低。
命名空间可以减少全局变量的数量,可以使用对象字面量将这一类的变量作为它的属性进行访问。
var Singleton = {fun1: function () {console.log('fun1');},fun2: function () {console.log('fun2');},};
使用 IIFI 立即执行函数表达式,让 JavaScript 编译器不在认为这是一个函数声明,而是 立即执行函数,将私有变量保存在它的闭包环境中,暴露可以访问私有变量的接口。类似创建一个块级作用域,和其他作用域的变量隔离。
var Singleton = (function () {let instance;function createInstance() {var object = new Object('I am the instance');return object;}return {getInstance: function () {if (!instance) {instance = createInstance();}return instance;},};})();function run() {const instance1 = Singleton.getInstance();const instance2 = Singleton.getInstance();alert('Same instance? ' + (instance1 === instance2));}run();