69-js单例模式 发表于 2018-11-28 | 分类于 前端-02-js基础复习 | sf 定义:确保一个类仅有一个实例,并提供一个访问它的全局访问点。 实现单例模式 (不透明的)1234567891011121314151617181920212223// 定义一个类function Singleton(name) { this.name = name; this.instance = null;}// 原型扩展类的一个方法getName()Singleton.prototype.getName = function() { console.log(this.name)};// 获取类的实例Singleton.getInstance = function(name) { if(!this.instance) { this.instance = new Singleton(name); } return this.instance};// 获取对象1var a = Singleton.getInstance('a');// 获取对象2var b = Singleton.getInstance('b');// 进行比较console.log(a === b); 我们也可以使用闭包来实现: 123456789101112131415161718192021222324function Singleton(name) { this.name = name;}// 原型扩展类的一个方法getName()Singleton.prototype.getName = function() { console.log(this.name)};// 获取类的实例Singleton.getInstance = (function() { var instance = null; return function(name) { if(!this.instance) { this.instance = new Singleton(name); } return this.instance } })();// 获取对象1var a = Singleton.getInstance('a');// 获取对象2var b = Singleton.getInstance('b');// 进行比较console.log(a === b); 实现单例模式 (透明的)123456789101112131415161718192021222324252627// 单例构造函数function CreateSingleton (name) { this.name = name; this.getName();};// 获取实例的名字CreateSingleton.prototype.getName = function() { console.log(this.name)};// 单例对象var Singleton = (function(){ var instance; return function (name) { if(!instance) { instance = new CreateSingleton(name); } return instance; }})();// 创建实例对象1var a = new Singleton('a');// 创建实例对象2var b = new Singleton('b');console.log(a===b);