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


相关推荐: 高端建站三要素:定制模板、企业官网与响应式设计优化  zabbix利用python脚本发送报警邮件的方法  如何在IIS中新建站点并解决端口绑定冲突?  Android使用GridView实现日历的简单功能  EditPlus中的正则表达式 实战(4)  如何在IIS管理器中快速创建并配置网站?  如何将凡科建站内容保存为本地文件?  IOS倒计时设置UIButton标题title的抖动问题  Laravel如何优化应用性能?(缓存和优化命令)  Laravel如何使用Telescope进行调试?(安装和使用教程)  javascript如何操作浏览器历史记录_怎样实现无刷新导航  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  EditPlus中的正则表达式实战(6)  LinuxCD持续部署教程_自动发布与回滚机制  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何在 React 中条件性地遍历数组并渲染元素  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  手机软键盘弹出时影响布局的解决方法  js实现点击每个li节点,都弹出其文本值及修改  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  利用python获取某年中每个月的第一天和最后一天  如何快速建站并高效导出源代码?  JavaScript模板引擎Template.js使用详解  JavaScript如何实现路由_前端路由原理是什么  JS碰撞运动实现方法详解  iOS中将个别页面强制横屏其他页面竖屏  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  使用Dockerfile构建java web环境  JavaScript如何实现继承_有哪些常用方法  Laravel观察者模式如何使用_Laravel Model Observer配置  网站制作软件有哪些,制图软件有哪些?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  微信小程序 canvas开发实例及注意事项  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel如何实现本地化和多语言支持?(i18n教程)  如何挑选高效建站主机与优质域名?  米侠浏览器网页背景异常怎么办 米侠显示修复  如何在云指建站中生成FTP站点?  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  大同网页,大同瑞慈医院官网?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  网站建设保证美观性,需要考虑的几点问题!