JavaScript设计模式之单例模式详解

发布时间 - 2026-01-11 01:48:40    点击率:

最近项目不太忙,难得有时间看看书,平时挺喜欢js这门语言。也看过很多高级教程,觉得自己还是比较热衷于js的设计模式。这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。

/**
 * pre 单例模式
 * 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
 * 应用:单例模式是一种常用的模式,有一些对象我们往往只需要一个,
 * 比如线程池、全局缓存、浏览器中的 window 对象等。
 */
//--------------singleton-01-------------
/*写法1*/
var Singleton = function(name){
 this.name = name;
 this.instance = null;
};

Singleton.prototype.getName = function(){
 alert(this.name);
};

Singleton.getInstance = function(){
 if(!this.instance){
  this.instance = new Singleton(name);
 }
 return this.instance;
};

var a = Singleton.getInstance("amy");
var b = Singleton.getInstance("ben");
alert(a === b);

// ------------singleton-02----------------
/*写法2*/
var Singleton = function(name){
 this.name = name;
}
Singleton.prototype.getName = function(){
 return this.name;
}

Singleton.getInstance = (function(){
 var instance = null;
 return function(name){
  if(!instance){
   instance = new Singleton(name);
  }
  return instance;
 }
})();

var a = Singleton.getInstance("amy");
var b = Singleton.getInstance("ben");
alert(a === b);

// ------------singleton03-----------
/*写法3*/
var Singleton = (function(){
 var instance;
 return function(name){
  if(instance){
   return instance;
  }
  this.name = name;
  instance = this;
 }
})();
var a = new Singleton("amy");
var b = new Singleton("ben");
alert(a === b);

//---------------- 示例 ---------------
var getSingleton = function(fn) {
 var result;
 return function() {
  if(!result) {
   result = fn.apply(this, arguments);
  }
  return result;
 }
};

var getSingletonVip = (function() {
 var instance;
 return function(fn) {
  return instance || (instance = fn.apply(this, arguments));
 }
})();

var createLoginUser = function() {
 var div = document.createElement("div");
 div.innerHTML = '这是登录框';
 document.body.appendChild(div);
 return div;
};

var createInfoGrid = function() {
 var div = document.createElement("div");
 div.innerHTML = '这是列表信息框';
 document.body.appendChild(div);
 return div;
};
//--执行singleton1 
var createUserDiv = getSingleton(createLoginUser);
createUserDiv();
createUserDiv();

//--执行singleton2
getSingletonVip(createLoginUser);
getSingletonVip(createLoginUser);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # 单例模式  # JavaScript设计模式---单例模式详解【四种基本形式】  # JS 设计模式之:单例模式定义与实现方法浅析  # javascript设计模式 – 单例模式原理与应用实例分析  # 原生javascript单例模式的应用实例分析  # 基于JavaScript实现单例模式  # js设计模式之单例模式原理与用法详解  # JavaScript设计模式之单例模式原理与用法实例分析  # JavaScript设计模式之单例模式简单实例教程  # JavaScript实现单例模式实例分享  # NodeJS设计模式总结【单例模式  # 适配器模式  # 装饰模式  # 观察者模式】  # javascript 单例模式详解及简单实例  # 解析Javascript单例模式概念与实例  # 怎样用Javascript实现单例模式  # 这是  # 是一种  # 觉得自己  # 只需要  # 提供一个  # 这门  # 大家多多  # 太忙  # 有一个  # 器中  # 平时  # singleton  # window  # appendChild  # function  # instance 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Linux后台任务运行方法_nohup与&使用技巧【技巧】  制作公司内部网站有哪些,内网如何建网站?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何在景安服务器上快速搭建个人网站?  Laravel怎么在Blade中安全地输出原始HTML内容  如何快速搭建二级域名独立网站?  如何续费美橙建站之星域名及服务?  如何快速生成凡客建站的专业级图册?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  香港服务器租用每月最低只需15元?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  独立制作一个网站多少钱,建立网站需要花多少钱?  如何用美橙互联一键搭建多站合一网站?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  php 三元运算符实例详细介绍  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何快速选择适合个人网站的云服务器配置?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  详解MySQL数据库的安装与密码配置  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Swift开发中switch语句值绑定模式  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何登录建站主机?访问步骤全解析  如何在Windows 2008云服务器安全搭建网站?  如何正确下载安装西数主机建站助手?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel如何创建自定义Artisan命令?(代码示例)  Android滚轮选择时间控件使用详解  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  javascript读取文本节点方法小结  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何在云虚拟主机上快速搭建个人网站?  Python高阶函数应用_函数作为参数说明【指导】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel怎么判断请求类型_Laravel Request isMethod用法  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Laravel怎么调用外部API_Laravel Http Client客户端使用  JavaScript如何实现错误处理_try...catch如何捕获异常?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  北京网站制作公司哪家好一点,北京租房网站有哪些?  python中快速进行多个字符替换的方法小结