<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript高级语法7-单例模式</title>
</head>
<body>
<script>
/*单例模式在js中使用非常频繁:
* 1.普通单体
* 2.具有局部变量的强大单体
* 3.惰性单体
* 4.分支单体
*/
function demo1(){
//1.普通单体
(function(){
//通过确保单例对象只存在一个实例,就可以确信自己在所有的代码中使用的是全局资源
//例如用户登录后的信息可以用一个单体存储
var UserInfo = {
name:"zhangdan",
code:"0202022",
deptName:"PD",
deptCode:"PD001",
getName:function(){
return "十里河"
}
}
alert(UserInfo.getName());
//这就是一个最简单的单体,他用来划分命名空间,并且将一群相关的属性方法组织到一起。 可以用.来访问。
var comm = {}; //把两个单体组织到comm的命名空间下。
comm.UserInfo = {
name:"zhangdan",
code:"0202022",
}
comm.funcInfo = {
funcName:"",
funcCode:"",
}
//在大型项目下,存在着你写的代码还有你引用的外界的JS类库,还有其他同事写的代码和类库。
//我们通过单体模式就可以很好的区分,这点只能慢慢体会了。
})()
} function demo2(){
//2.具有局部变量的强大单体
(function(){
//模拟一个ajax操作
function Ajax(){}
Ajax.request = function(url,fn){
if(true){
fn("javascript","extjs");
}
}
//通过闭包的原理解决在上例中的问题 var UserInfo = (function(){
//利用闭包使单体拥有自己的私有局部变量
var name = '';
var code = '';
//利用ajax访问数据库来取得数据
Ajax.request("www.baidu.com",function(n,c){
name = n;
code = c;
})
return {
name:name,
code:code,
}
})();
alert(UserInfo.name+" "+UserInfo.code);
})()
} function demo3(){
//3.惰性单体
(function(){
//模拟一个ajax操作
function Ajax(){}
Ajax.request = function(url,fn){
if(true){
fn("demo3","extjs");
}
}
//通过闭包的原理解决在上例中的问题 var UserInfo = (function(){
var userInfo = "" //私有变量 function init(){
var name = '';
var code = '';
//利用ajax访问数据库来取得数据
Ajax.request("www.baidu.com",function(n,c){
name = n;
code = c;
})
return {
name:name,
code:code,
}
}
return {
getInstance:function(){
if(userInfo){
return userInfo;
}else{
userInfo = init();
return userInfo;
}
}
}
})();
alert(UserInfo.getInstance().name+" "+UserInfo.getInstance().code);
})()
} function demo4(){
//4.分支单体
/*
* 用处:在做ajax的时候根据不同的浏览器获得不同的xhr(XMLHttpRequest)
* 在不同分辨率的情况下初始化不一样的界面
*/
(function(){
//得到机器分辨率
var screenWidth = window.screen.width;
var screenHeight = window.screen.height; var portalInfo = (function(){
var $12801024 = {info:"1,2,3,5"}
var $1024768 = {info:"4,2,1,2"}
if(screenWidth ==1920){
return $12801024;
}else if(screenWidth ==1024){
return $1024768
}
})();
alert(portalInfo.info);
})()
/*
* 这些并非js的高深技术,是它的使用技巧。
*/
}
</script>
</body>
</html>

JavaScript设计模式-7.单例模式的更多相关文章

  1. JavaScript设计模式之单例模式【惰性单例】

    在提高开发水平,往中高级前端工程师中,利用设计模式是必不可少的一条道路.掌握设计模式的思想远远比硬套重要,因为设计模式是一种思想,不局限于开发语言.但实际上由于语言的特性不同,往往在实现的时候会有不少 ...

  2. JavaScript设计模式_01_单例模式

    最近项目不太忙,难得有时间看看书,平时挺喜欢js这门语言.也看过很多高级教程,觉得自己还是比较热衷于js的设计模式.这一次重温一下<JavaScript设计模式与开发实践>,开篇为单例模式 ...

  3. 再起航,我的学习笔记之JavaScript设计模式10(单例模式)

    单例模式 单例模式(Singleton) : 又被称为单体模式,是只允许实例化一次的对象类.一个类有且仅有一个实例,并且自行实例化向整个系统提供. 命名空间 单例模式可能是JavaScript中我们最 ...

  4. [JavaScript设计模式]惰性单例模式

    惰性单例模式 之前介绍了JS中类的单例模式,这次我们讨论下单例模式的应用.在众多网站中,登录框的实现方式就是一个单例,点击一次就展示一次,所以我们可以在页面加载好的时候就创建一个登录框,点击页面上的登 ...

  5. JavaScript设计模式,单例模式!

    单例设计模式:保证一个类仅有一个实例,并且提供一个访问它的全局访问点.有些对象只需要一个,这时可用单例模式. 传统的单例模式 和new 创建对象的调用不一样 调用者要调用xxx.getInstance ...

  6. 第一章 --- 关于Javascript 设计模式 之 单例模式

    首先我们对单例模式先进行理论上的讲解,接下来,我们再通过具体的代码示例,来讲解,这个单例模式的使用场景和这种模式的优缺点 (这个系列的所有关于设计模式的都是面向Javascript) 一.理论定义: ...

  7. JavaScript设计模式之单例模式

    一.单例模式概念 单例就是保证一个类只有一个实例,实现方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个 ...

  8. 「设计模式」JavaScript - 设计模式之单例模式与场景实践

    单例介绍 上次总结了设计模式中的module模式,可能没有真真正正的使用在场景中,发现效果并不好,想要使用起来却不那么得心应手, 所以这次我打算换一种方式~~从简单的场景中来看单例模式, 因为Java ...

  9. JavaScript 设计模式之单例模式

    一.单例模式概念解读 1.单例模式概念文字解读 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在Ja ...

随机推荐

  1. ASP.NET Core2读写InfluxDB时序数据库

    在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警.而时序数据库就是用于存放管理 ...

  2. 作业二:注册软件github

    注册Github

  3. C#动态编译引擎-CS-Script 简单使用

    Technorati 标记: cs-script 介绍可以参看  http://www.cnblogs.com/shanyou/p/3413585.html 还可以参看 这个  项目介绍 性能测试 c ...

  4. python将json转csv

    现有一个需求要将json转成excel,使用python将其转为csv格式,使用excel打开即可. import json import csv import codecs f = open('te ...

  5. maven项目打jar包

    打包有两种方式: 1.直接 项目--右键--export,选择JAR file打包(不推荐这种方式): 这样直接打的包通过java -jar 会提示“没有主清单属性”,需要修改jar包中的MANIFE ...

  6. 论 BUG调试与(程序猿)初学者

    作为一枚程序猿,BUG调试是最基本的技能,对于初学者更是重中之重.个人而言,要想为自己的程序猿生涯更上一层楼,就得知道什么是BUG调试,而且还必须知道怎么调好BUG.那么BUG究竟是什么呢?在我之前的 ...

  7. CheckBox使用记录

    页面显示 页面代码 <div> <div><input type="checkbox" value="" class=" ...

  8. oracle数据导出导入(exp/imp)

    1.本地数据库导入导出 1.导出 (运行---cmd中操作)exp 用户名/密码@数据库实例名file=本地存放路径eg: exp jnjp/jnjp@ORCL file=C:/jnjp.dmp 2. ...

  9. hibernate SQL Error: 8152, SQLState: 22001

    这种会出现字符串截断 数据库字段长度设置太小,改大即可.

  10. python--深浅拷贝 join() 列表和字典的删除 fromkeys建立字典

    北京的冬天雾霾依旧很重,依稀记得人生初见雾霾时的样子,那时的回忆也是有些尴尬,不过雾霾也伴随了我的成长,成为了我肺泡中不可分割的一部分. 今天我想写的是拷贝的问题,不过在这之前我想先补充一点关于字符串 ...