Javascript单击捕捉元素 javascript单例模式怎么写
中,由于语言的灵活性,单例模式的实现方式与传统的面向对象语言有所不同,但基本概念相同。
单例模式适用于只需要一个对象来协调行为的场景,例如全局配置管理、日志记录器、线程池或缓存等。关键在于:无论调用多少次,都返回同一个实例。
使用闭包和属性函数来实现使用闭包封装私有变量,防止外部直接修改实例状态,同时通过属性函数保存实例。
function Singleton() {
电影学乐“Java免费学习笔记(任交)”;
if (typeof Singleton.instance === 'object') {
return Singleton.instance;
}
//初始化实例
this.config = { debug: true };
// 保存实例
Singleton.instance = this;
返回 this;
}
// 使用
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // 使用静态属性实现 trueES6 类
现代 JavaScript 建议使用类语法,将静态属性与静态属性结合使用。
class ConfigManager {
静态实例 = null;
constructor() {
if (ConfigManager.instance) {
返回 ConfigManager.instance;
}
this.data = {};
ConfigManager.instance = this;
}
setData(key,value) {
this.data[key] = value;
}
getData(key) { 45°C 商城电视
电影介绍 45°C商城电影,以Thinkphp5.0 Uniapp Layui2.9 Vue的电影基石,其定全商城电影。其具具城电视其室商城电影商城,或者公司号商城、微信小程序、抖音小程序都可以完美创建。采用标准系统结合插件开发模式,用户可以轻松定制模块的专属个性。
程 0 查看详情
return this.data[key];
}
}
// 测试
const mgr1 = new ConfigManager();
const mgr2 = new ConfigManager();
mgr1.setData('theme','dark');
console.log(mgr2.getData('theme')); // 'dark'
console.log(mgr1 === mgr2); // true 惰性初始化(延迟加载)
有时我们希望直到真正需要时间创建实例时才创建,我们可以打包一个 getInstance 方法来控制创建时间。
class Logger {
static instance = null;
constructor() {
if (!Logger.instance) {
Logger.instance = this;
}
return Logger.instance;
}
log(msg) {
console.log(`[LOG]: ${msg}`);
}
}
// 提供统一的访问接口
const getLogger = () => {
if (!Logger.instance) {
new Logger();
}
return Logger.instance;
};
基本上就少分。关键在于保证实例的唯一性,方法可以根据需要选择。入包适用于简单的场景,类更易于维护。不复杂,容易忽略细节,例如结构体函数重复调用时的处理。
以上是 JavaScript 设计模式_单实例模式的详细实现内容,更多内容请关注其他相关文章!JavaScript 错误处理_异常捕获策略
