在 JavaScript 中,可以使用闭包( closures )来实现单例模式。闭包是指一个函数可以访问它的外部作用域中的变量,即使在函数被返回后也可以访问。利用闭包,我们可以将一个函数作为一个类,构造函数中定义私有变量和方法,返回一个公共方法来访问这些私有变量和方法。这个公共方法就是单例模式的实例。
以下是一个使用闭包实现单例模式的示例代码:
var Singleton = (function() {
var instance;
function Singleton() {
if (instance) {
return instance;
}
instance = this;
// 在这里定义私有变量和方法
var privateVariable = "I am a private variable";
function privateMethod() {
console.log("I am a private method");
}
// 在这里定义公共变量和方法
this.publicVariable = "I am a public variable";
this.publicMethod = function() {
console.log("I am a public method");
console.log(privateVariable);
privateMethod();
};
}
return Singleton;
})();
// 创建单例模式实例
var instance1 = new Singleton();
var instance2 = new Singleton();
// 测试单例模式实例
console.log(instance1 === instance2); // true
instance1.publicMethod(); // "I am a private variable", "I am a private method"
在上面的示例代码中,我们使用了一个立即执行函数( IIFE )来创建一个闭包。在闭包中,我们定义了一个变量 instance
,它保存了单例模式的实例。在构造函数中,我们检查 instance
是否已经存在,如果存在则直接返回该实例,否则就创建一个新的实例并将其保存到 instance
变量中。然后,我们定义了一些私有变量和方法,以及一些公共变量和方法。最后,我们返回了构造函数,这样我们就可以通过 new Singleton()
来创建单例模式的实例。
关键词高亮: