/*
1 简单单体
*/
var Singleton = {
attr1: 1 ,
method1:function(){
//do sth
}
};
alert(Singleton.attr1);
Singleton.method1(); //单体模式一般用于划分命名空间 也就是区分是哪位开发人员的代码 例如
//张三工程师开发的代码
var Zhangsan = { };
//把张三的逻辑写在这里面
Zhangsan.Singleton = {
attr1:1,
method1:function(){
//do sth
}
}; /*
2 闭包单体: 闭包主要的目的是保护私有变量数据
*/
// 命名空间
var Zhangsan = {};
Zhangsan.Singleton = ( function(){
//私有变量和方法
var a = 1;
function f(){
//do sth
}
//返回单体对象
return {
attr1: a,
method1:function(){
return f();
}
};
})();
alert(Zhangsan.Singleton.attr1);
Zhangsan.Singleton.method1(); /*
3 惰性单体:(和闭包单体有相似的地方)
*/ var Zhangsan = {};
Zhangsan.Singleton = (function(){
//私有变量 控制返回的单体对象
var uniqInstance;
//初始化方法,控制返回的单体中有哪些东西
function init(){
//私有变量
var a = 10;
var fn = function(){
alert("fn");
};
return {
attr : a,
method : fn
};
} return {
getInstance:function(){ //如果有单体 则返回 否则创建一个返回
if(!uniqInstance){ //如果不存在
uniqInstance = init();
}
return uniqInstance;
}
};
})(); //调用惰性单体
alert(Zhangsan.Singleton.getInstance().attr); //
Zhangsan.Singleton.getInstance().method(); //fn /*
4 分支单体:判断程序分支 浏览器的差异检测
*/
var Zhangsan ={};
var different = true; //用于标记不同的浏览器
Zhangsan.Singleton = (function(){
var objA = { //a浏览器的内部配置
//属性、方法等
attr:"a",
method : function(){
alert("fn");
}
};
var objB = { //b浏览器的内部配置
//属性、方法等
};
return (different) ? objA:objB; //根据不同的浏览器 返回不同的对象
})(); alert(Zhangsan.Singleton.attr); //a

JavaScript中的单体模式四种实现方式的更多相关文章

  1. lua中for循环的四种遍历方式

    lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3   key,value pairs 取每一 ...

  2. 从零开始学习前端JAVASCRIPT — JavaScript中this指向的四种情况

    JavaScript中this的四种情况(非严格模式) 1.当this所在函数是事件处理函数时,this指向事件源.2.当this所在函数是构造函数时,this指向new出来的对象.3.this所在函 ...

  3. JavaScript中定义对象的四种方式

    最近在阅读< JavaScript 高级程序设计>,未免遗忘读过的内容,就打算以博客的形式做些读书笔记.今天介绍的是 JavaScript 中的四种定义对象的方法,除了这四种方法,还有工厂 ...

  4. Java中Map集合的四种访问方式(转)

    最近学习Java发现集合类型真是很多,访问方式也很灵活,在网上找的方法,先放下备用 public static void main(String[] args) { Map<String, St ...

  5. Javascript 中使用Json的四种途径

    1.jQuery插件支持的转换方式: 复制代码代码如下: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 ...

  6. python中主要存在的四种命名方式:

    1.object  -- 公用方法 2._object -- 办保护 (1)被看做是‘protect’,意思是只用类对象和自来对象自己能访问的变量 (2)在模块或类外不可以使用,不能用 ‘from m ...

  7. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...

  8. JavaScript高级之函数的四种调用形式

    主要内容 分析函数的四种调用形式 弄清楚函数中this的意义 明确构造函对象的过程 学会使用上下文调用函数 了解函数的调用过程有助于深入学习与分析JavaScript代码. 本文是JavaScript ...

  9. 浅谈 JavaScript 中的继承模式

    最近在读一本设计模式的书,书中的开头部分就讲了一下 JavaScript 中的继承,阅读之后写下了这篇博客作为笔记.毕竟好记性不如烂笔头. JavaScript 是一门面向对象的语言,但是 ES6 之 ...

随机推荐

  1. 【Unity与23种设计模式】适配器模式(Adapter)

    GoF中定义: "将一个类的接口转换成为客户端期待的类接口.适配器模式让原本接口不兼容的类能一起合作." 适配器模式与装饰模式有一定的相似之处 两者都是在着手解决C#不能多继承的问 ...

  2. Jmeter + Ant 测试环境搭建 及解决问题: the <jmeter> type doesn't support nested text data

    1.首先确保测试机器中已经按照jdk1.6以上版本,如果没有,那就上官网下载吧. 2.下载Ant,解压至指定目录,并配置好环境变量:http://ant.apache.org/ 在命令行下执行ant ...

  3. web 直播&礼物赠送------腾讯云(四)

    直播项目搁置了将近1年,以为都搁浅了,没想到头头又提起来了,这次直播技术更替为了腾讯云,消息系统没变,采用的依然是融云,新增了礼物赠送功能. 项目完成基本就是这样子: 一,播放器 由阿里云转腾讯云,w ...

  4. Python基础-week03

    本节内容摘要:http://www.cnblogs.com/Jame-mei 1.集合及其运算 2.文件读与写详解(1-3) 3.文件修改详解 作业:程序1: 实现简单的shell sed替换功能   ...

  5. 怎么看 EOS 的代码最爽?

    进入 EOS 的世界之前,愉快地看系统代码是第一步,试了 Visual Studio / Source Insight / Understand / Sublime 等多款 IDE / 编辑器后,强烈 ...

  6. 简单了解C语言内嵌汇编

    最近看自旋锁的实现,自选锁的循环查找锁的主要实现类似如下,该实现使用到了内嵌的汇编(摘自sanos内核,源代码有2处实现,一处使用intel汇编,是没有问题的,另一处使用内嵌汇编语法,源代码中为cmp ...

  7. MSF添加ms17-010的exp脚本及攻击复现

    原文地址:https://bbs.ichunqiu.com/thread-23115-1-1.html 本来今晚在准备复现最近的CVE-2017-11882,由于本人是小白一枚,不知道这么添加msf的 ...

  8. 关于html文档的规范

    1. <!DOCTYPE html> 告诉浏览器该文档使用哪种html或xhtml的规范 2. 元数据中的X-UA-Compatible <meta http-equiv=" ...

  9. Java基础_Java概述

    Java_概述 特点: 平台的移植性 开源 面向对象 多线程 安全性 工作方式: 先编译再解释执行. 先通过Javac命令将Java源代码编译成字节码文件(bytecode,类文件,.class,中间 ...

  10. Redis sentinel & cluster 原理分析

    1. Redis集群实现分析 1.1  sentinel 1.   功能 Sentinel实现如下功能: (1)monitoring--redis实例是否正常运行. (2)notification-- ...