学习JavaScript设计模式之单例模式


Posted in Javascript onJanuary 19, 2016

一、定义

保证一个类仅有一个实例,并提供一个访问它的全局访问点。
当单击登陆按钮,页面中出现一个登陆浮窗,这个登陆浮窗是唯一的,无论单击多少次登陆按钮,这个浮窗都只会被创建一次,那么这个登陆浮窗就适合用单例模式来创建。

二、实现原理

要实现单例并不复杂,使用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。

三、假单例

全局变量不是单例模式,但在JavaScript开发中,我们经常会把全局变量当成单例来使用。

var a = {};

降低全局变量带来的命名污染
(1)使用命名空间

var namespace1 = {
  a: function(){},
  b: 2
}

(2)使用闭包封装私有变量

var user = (function() {
  var _name = 'lee',
    _age = '25';
  return {
    getUserInfo: function() {
      return _name + ":" + _age;
    }
  };
})();

四、惰性单例:在需要的时候才能创建对象实例

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

// 测试
function testSingle(){}
getSingle(testSingle)() === getSingle(testSingle)();  // true

五、补充:

(1)懒加载

var lazyload = function() {
  console.log(1);
  lazyload = function() {
    console.log(2);
  }
  return lazyload();
}

lazyload();

(2)预加载

var preload = (function() {
  console.log(1);
  preload = function() {
    console.log(2);
  };
  return preload;
})();

preload();

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
让iframe自适应高度(支持XHTML,支持FF)
Jul 24 Javascript
jQuery Ajax之$.get()方法和$.post()方法
Oct 12 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
javascript/jquery获取地址栏url参数的方法
Mar 05 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
Dec 03 Javascript
javascript中返回顶部按钮的实现
May 05 Javascript
JQuery在循环中绑定事件的问题详解
Jun 02 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 #Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 #Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 #Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
Jan 19 #Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
Jan 19 #Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
Jan 19 #Javascript
学习JavaScript设计模式之享元模式
Jan 18 #Javascript
You might like
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
详解python的数字类型变量与其方法
2016/11/20 Python
Python微信公众号开发平台
2018/01/25 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python生成器用法实例详解
2019/11/22 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
Python无损压缩图片的示例代码
2020/08/06 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
职专应届生求职信
2013/11/16 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
借名购房协议书范本
2014/10/06 职场文书
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android