在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例。单例其实有点类似于C# /C++里面的静态类。在javascript中,是以对象字面量的方式来创建单例对象的,也就是以花括号包裹起来的键值对的JSON形式来创建的。例如:

 var singletonObj={
    name:'John',
    method:function(){
        //方法代码
 }
}; 

 模块模式则是用来为单例创建私有变量和特权方法(公有方法),从而能增强单例的可访问性。以模块模式定义的私有变量和私有函数只有单例对象本身的特权(公有)方法可以访问到,其他外部的任何对象都不可以。其语法形式如下:

var singleton = function(){
    //私有变量
    var privateVariable = 10;
    
    //私有函数
    function privateFunction(){
        return false;
    }

//返回对象
    return {
        //公有属性
        publicProperty: true,
        
        //公有属性和公有方法
        publicMethod : function(){
            privateVariable++;
            return privateFunction();
        }
    };
}();

上面的代码中,我们创建了一个匿名函数并赋值给变量singleton,然后立即调用这个函数返回可以公开的公有方法和属性的对象实例。在匿名函数内部,首先定义了私有变量和私有函数,然后将一个对象实例作为函数值返回,这样返回的对象中只包含可以公开的属性和方法。因为这个返回的对象在匿名函数内部定义,因此它内部的公有方法和属性都可以访问私有变量和函数。这种模式适合需要对单例进行一些初始化,又需要维护私有变量时。

单例对象中公有属性和公有方法的调用与一般对象的属性和方法调用一样,使用点表示法或者方括号语法来调用单例对象的公有成员。例如:

alert(singleton.publicProperty);

alert(singleton[publicProperty]);

执行结果都是:true

转载于:https://www.cnblogs.com/fengmiaosen/archive/2011/01/11/1933219.html

Javascript中的单例和模块模式相关推荐

  1. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

  2. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)

    摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...

  3. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比

    点击关注公众号,利用碎片时间学习 来源:blog.csdn.net/xsxy0506/article/details/117321181 redis作为一种NoSql数据库,其提供了一种高效的缓存方案 ...

  4. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  5. 多个so中模板单例的多次实例化

    在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题.原来是一个so文件中的构造函数被初始化二次! 这个单例是通过继承模板来实现的(暂时不 ...

  6. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

  7. spring框架中的单例Beans是线程安全的么?

    看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  8. Spring框架中的单例Beans是线程安全的么

    看到这样一个问题:Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  9. Spring源码 - 从缓存中获取单例Bean

    # Spring源码 - 从缓存中获取单例Bean Spring版本:Spring 5.3.13-release # 1.从缓存中获取单例Bean 单实例Bean在Spring的同一个容器中只会创建一 ...

最新文章

  1. 地理围栏API服务开发
  2. java python算法_用Python,Java和C ++示例解释的排序算法
  3. iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象...
  4. 【python】lxml处理命名空间
  5. 先学python还是先学数据库_跟着销售学python8-微信平台初次见识数据库(6)
  6. 03.德国博士练习_02_admin_cluster
  7. BZOJ1298:[SCOI2009]骰子的学问
  8. 我们身边的知识产权单元测试答案(期末考试复习)【湘潭大学】
  9. Chinese NER Using Lattice LSTM
  10. 【数据结构和算法笔记】用c语言实现栈
  11. 最小方法ZOJ 1579 Bridge
  12. 《Linux就该这么学》修正已知全部勘误,免费下载啦!
  13. python课程预告_Python3编程预告
  14. 计算机视觉中的对象跟踪(完整指南)
  15. Python制作个人动漫头像(简化版)
  16. RFID固定资产管理系统中的RFID标签的使用-新导智能
  17. mysql路由和MAH
  18. Pytest中测试用例参数化时ids中文乱码处理
  19. C语言:初识数组及数组的复制
  20. 能效最大化准则下的星地融合网络的安全波束成形算法

热门文章

  1. zend studio和dreamweaver使用小笔记
  2. SSH框架+mysql+tomcat 服务器 中文乱码解决方案
  3. Windows Internet Explorer 8 简体中文正式版发布!
  4. raw socket java_记一次蛋疼的Raw socket发送经历。附:Raw socket编程总结
  5. androidpn的学习研究(二)androidpn-server服务端启动过程的理解分析
  6. Struts2学习笔记(十七) 文件下载(File Download)
  7. 深入理解控制反转(IoC)和依赖注入(DI)
  8. 关于表格前面checkbox复选框不打勾的问题
  9. 一步安装openssh的脚本
  10. Tomcat相关总结