单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供对该实例的全局访问点。
在JavaScript中,单例模式可以通过类的静态属性或闭包来实现。下面我们会用两个例子来说明。
在这个例子中,我们定义一个Singleton类,使用类的静态属性来实现单例模式。
class Singleton {
static instance = null;
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
Singleton.instance = this;
}
}
上面的代码中,我们在Singleton类中声明了一个静态属性instance,初始值为null。在类的构造函数中,我们判断instance是否为null,如果不是,返回已有的实例;如果是,为instance赋值为this,并返回它。
这样,我们就可以创建Singleton的实例,并确保只有一个实例存在。
const s1 = new Singleton();
const s2 = new Singleton();
console.log(s1 === s2); // true
上面的代码中,我们分别创建了两个Singleton的实例s1和s2,它们是同一个对象。
在这个例子中,我们使用闭包来实现单例模式。
const Singleton = (() => {
let instance = null;
return class {
constructor() {
if (instance) {
return instance;
}
instance = this;
}
};
})();
上面的代码中,我们定义了一个IIFE(立即调用函数表达式),返回一个闭包,闭包包含一个instance变量和一个Singleton类。在Singleton类的构造函数中,我们判断instance是否为null,如果不是,返回已有的实例;如果是,为instance赋值为this,并返回它。
这样,我们就可以创建Singleton的实例,并确保只有一个实例存在。
const s1 = new Singleton();
const s2 = new Singleton();
console.log(s1 === s2); // true
上面的代码中,我们分别创建了两个Singleton的实例s1和s2,它们是同一个对象。
单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供对该实例的全局访问点。在JavaScript中,单例模式可以通过类的静态属性或闭包来实现。
以上是完整的JavaScript单例模式实现攻略,希望对你有所帮助。