<!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. CYUSB3014固件部分低版本工程在Eclipse中编译得到img文件时无效的解决方案

    最近在做基于我们AC6102开发板的UVC图像视频方案,下载了官方的an75779应用工程,但是倒入到FX3—SDK自带的Eclipse中后,却无法编译生成img文件,经过比对后确认是生成该文件的命令 ...

  2. Baidu Map开发示例

    1.获取SHA1码 在Eclipse中点击“Windows”----->“Preferences” ----->“Android” ----->“Build”如下图: 打开“Win+ ...

  3. D3 data()

    与datum()的区别 假设要绑定的数组为[3,6,9],那么我们希望第一个p元素绑定3,第二个绑定6,第三个绑定9.这种情况就需要使用data()函数,如果使用datum(),则会将数组本身绑定到各 ...

  4. [label][Chrome-Extension] How to start Chrome Extension's development

    Firstly , you should read these two pages.  https://developer.chrome.com/extensions/overview https:/ ...

  5. Android-自定义联系人快速索引

    效果图: 布局去指定 view.custom.shangguigucustomview.MyCustomIndexView 自定义View对象 <!-- 自定义联系人快速索引 --> &l ...

  6. prog1,2,3

    1.第一版本程序Prog1:+ 给定一个数组,实现数组元素求和:具体要求:实现对一维数组(a[100])的所有元素相加运算.+ 数据准备:a)数组长度:100:b)数组数据来源:实验数据A列:1~10 ...

  7. Github 的注册教程和初步使用体验

    我叫许晴,是网工143的学生,学号是1413042064,兴趣包括手绘,看书和手游.学习过c++和汇编语言课程,但在编程方面没什么独立实践经验. 我的Githup用户名是 XQ123 .下面是我在gi ...

  8. python怎么生成requirements.txt文件

    生成文件: pip freeze > requirements.txt 安装依赖: pip install -r requirements.txt

  9. 使用 IIS 在 Windows 上托管 ASP.NET Core(Windows安装实践)

    原文地址 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.0&tabs= ...

  10. [Oracle]Oracle数据库CPU利用率很高解决方案

    Oracle数据库经常会遇到CPU利用率很高的情况,这种时候大都是数据库中存在着严重性能低下的SQL语句,这种SQL语句大大的消耗了CPU资源,导致整个系统性能低下.当然,引起严重性能低下的SQL语句 ...