JavaScript中的单体模式四种实现方式
/*
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中的单体模式四种实现方式的更多相关文章
- lua中for循环的四种遍历方式
lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3 key,value pairs 取每一 ...
- 从零开始学习前端JAVASCRIPT — JavaScript中this指向的四种情况
JavaScript中this的四种情况(非严格模式) 1.当this所在函数是事件处理函数时,this指向事件源.2.当this所在函数是构造函数时,this指向new出来的对象.3.this所在函 ...
- JavaScript中定义对象的四种方式
最近在阅读< JavaScript 高级程序设计>,未免遗忘读过的内容,就打算以博客的形式做些读书笔记.今天介绍的是 JavaScript 中的四种定义对象的方法,除了这四种方法,还有工厂 ...
- Java中Map集合的四种访问方式(转)
最近学习Java发现集合类型真是很多,访问方式也很灵活,在网上找的方法,先放下备用 public static void main(String[] args) { Map<String, St ...
- Javascript 中使用Json的四种途径
1.jQuery插件支持的转换方式: 复制代码代码如下: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 ...
- python中主要存在的四种命名方式:
1.object -- 公用方法 2._object -- 办保护 (1)被看做是‘protect’,意思是只用类对象和自来对象自己能访问的变量 (2)在模块或类外不可以使用,不能用 ‘from m ...
- Javascript中函数的四种调用方式
一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...
- JavaScript高级之函数的四种调用形式
主要内容 分析函数的四种调用形式 弄清楚函数中this的意义 明确构造函对象的过程 学会使用上下文调用函数 了解函数的调用过程有助于深入学习与分析JavaScript代码. 本文是JavaScript ...
- 浅谈 JavaScript 中的继承模式
最近在读一本设计模式的书,书中的开头部分就讲了一下 JavaScript 中的继承,阅读之后写下了这篇博客作为笔记.毕竟好记性不如烂笔头. JavaScript 是一门面向对象的语言,但是 ES6 之 ...
随机推荐
- 《深入理解Bootstrap》读书笔记(二)
列表 1.普通列表 普通列表的使用没有什么变化,只是在原本的基础上对margin和行间距做了一些调整. 2.有序列表 有序列表的使用也是没有什么变化,只是在原本的基础上对margin和行间距做了一些调 ...
- 正则表达式入门+实战(c#实现)
如果有人和你说,如果不将字符串转换为数字,你要如何判断字符串是否由全数字组成?把字符串拆成char数组,然后放入一个循环,来判断每个char是否为数字?那你要如何判断手机号是否合法?IP是否合法呢?把 ...
- puppet客户端拉取服务端的资源时报错
2017-11-01 16:21:47 客户端再拉取服务端的配置的资源时,出现一下报错: 造成原因:服务配置的资源不可用: 解决办法:将服务端不正确的资源配置删除: master: cd ...
- 使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,
首先安装pip install uiautomation, 运行本文代码.或者下载https://github.com/yinkaisheng/Python-UIAutomation-for-Wind ...
- leetCode:206 反转链表
206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...
- Android TextView数字增长动画效果
某些app上,新进入一个Activity的时候,上面的一个关键性数字(比如金额)会以一个数字不断变大的动画来显示.刚开始的时候,想到的一个方案是:使用Thead+Handler,给定一个动画总时长与刷 ...
- 基于docker 部署 canvas-lms
准备: 一台8G内存的服务器.安装好docker, pull一个ubuntu镜像下来, 可以是最新版也可以是官方支持的14/ 16 Step 1: 启动docker容易加载ubuntu镜像.命令如下 ...
- oracle 常用select sql语句
本人认为很实用的几条语句 1)select ... from ...into... 2)insert into ...select ... 3)select ...from ...left join ...
- JS图片更换还原操作,通过图片识别标识
//图片更换还原操作,图片识别标识 如图片img.png 可换成 img2.png function img_biaoshi(caozuo,img_id, biaoshi) { var img_src ...
- 编写简单的辅助脚本来在 Google 表格上记账
我的第二份工作入职在即,而这一次则真的是完全跑到了一个陌生的城市了.租房,购置相关用品,还尚未工作钱就花掉一堆.尽管我个人之前一直都没有过记账的习惯,但为了让自己能够搞清楚自己的钱都花在哪里了,于是还 ...