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

 更新时间:2016年01月19日 11:01:29   作者:奋飛  
这篇文章主要为大家介绍了JavaScript设计模式中的单例模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下

一、定义

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

二、实现原理

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

三、假单例

全局变量不是单例模式,但在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程序设计有所帮助。

相关文章

  • TopList标签和JavaScript结合两例

    TopList标签和JavaScript结合两例

    TopList标签和JavaScript结合两例...
    2007-08-08
  • 详解webpack介绍&安装&常用命令

    详解webpack介绍&安装&常用命令

    本篇文章主要介绍了详解webpack介绍&安装&常用命令,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • javascript 实现自由落体的方块效果

    javascript 实现自由落体的方块效果

    这其实是一个很简单的实现,create一个新的div元素,然后append到文档的body上,经过一定时间的延迟,做自由落体运动,着地后fade消失。 不多说,直接上代码。
    2010-01-01
  • JavaScript实现两个数组的交集

    JavaScript实现两个数组的交集

    这篇文章主要介绍了JavaScript实现两个数组的交集,给定两个数组 ​​nums1​​​和​​nums2​​返回它们的交集,输出结果中的每个元素一定是唯一的,下文详细介绍,需要的小伙伴可以参考一下
    2022-03-03
  • js获取元素到文档区域document的(横向、纵向)坐标的两种方法

    js获取元素到文档区域document的(横向、纵向)坐标的两种方法

    获取页面中元素到文档区域document的横向、纵向坐标,在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法
    2013-05-05
  • JS调用打印方法设置页眉页脚的实例

    JS调用打印方法设置页眉页脚的实例

    一个网页打印相关功能的扩展演示特效,在实现了打印功能外,还实现了打印预览、打印前的页眉页脚设置,直接打印等功能,以前对JS打印前设置页脚见的不多,所以这一个也算是挺有价值的,希望闲暇时参阅
    2013-05-05
  • 利用JavaScript检测CPU使用率自己写的

    利用JavaScript检测CPU使用率自己写的

    这篇文章主要介绍了自己写的一个利用JavaScript检测CPU使用率的方法,需要的朋友可以参考下
    2014-03-03
  • JavaScript fetch接口案例解析

    JavaScript fetch接口案例解析

    本文通过案例给大家介绍了JavaScript fetch接口,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • JS短路原理的应用示例 精简代码的途径

    JS短路原理的应用示例 精简代码的途径

    正如标题所言,js中||和&&的特性帮我们精简了代码的同时,也带来了代码可读性的降低。这就需要我们自己来权衡了,下面有个不错的示例
    2013-12-12
  • JavaScript基于面向对象实现的无缝滚动轮播示例

    JavaScript基于面向对象实现的无缝滚动轮播示例

    这篇文章主要介绍了JavaScript基于面向对象实现的无缝滚动轮播,结合实例形式分析了JavaScript面向对象实现的无缝滚动轮播相关对象定义、初始化及功能实现技巧,需要的朋友可以参考下
    2020-01-01

最新评论