单体模式
2016-07-18 21:28
225 查看
单体(singleton)模式是javascript中最基本但又最有用的模式之一,它可能比其他任何模式都常用。
这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源。
简单单体
闭包单体
惰性单体
分支单体
这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源。
简单单体
闭包单体
惰性单体
分支单体
//单体模式 var Ext = {}; Ext.model = { attr : 10, attr2 : 20, fn1 : function(){ console.log('fn1'); }, fn2 : function(){ console.log('fn2'); } } console.log(Ext.model.attr); Ext.model.fn1(); //闭包单体 var Ext = {}; Ext.model = (function(){ //给自己添加私有成员 attr = 10; attr2 = 20; var methods = function(){ console.log('methods1'); } var mothods2 = function(){ console.log('methods2'); } //把块级作用域里的执行结果复制给我的单体对象 return { a1 : attr, a2 : attr2, m1 : function(){ return methods(); }, m2 : function(){ return methods2(); } } })(); console.log(Ext.model.a1); Ext.model.m1(); //惰性单体,和闭包单体有一些相似的地方 var Ext = {}; Ext.model = (function(){ //私有变量,控制返回的对象 var result; //undinfined //需要一个构造器,init初始化单体对象的方法 function init(){ //私有成员变量 var attr1 = 10; var attr2 = 20; var methods1 = function(){ console.log('methods1'); }; var methods2 = function(){ console.log('methods2'); }; return { a1 : attr1, a2 : attr2, m1 : function(){ return methods1(); }, m2 : function(){ return methods2(); } } } return { getmodel : function(){ //如果不存在就创建单体 if(!result){ result = init(); } return result; } } })(); console.log(Ext.model.getmodel().a1); Ext.model.getmodel().m1(); //分支单体 用于判断浏览器差异检测 var Ext = {}; var def = true; Ext.model = (function(){ var objA = { attr1 : '火狐浏览器' // 属性1 // 属性2 // 方法1 // 方法2 }; var objB = { attr1 : 'IE浏览器' // 属性1 // 属性2 // 方法1 // 方法2 } return (def) ? objA : objB; })(); console.log(Ext.model.attr1);
相关文章推荐
- 深入理解PHP之匿名函数
- 最后一次说说闭包
- Ruby中使用Block、Proc、lambda实现闭包
- LUA中的闭包(closure)浅析
- Lua中的闭包学习笔记
- C#中函数的创建和闭包的理解
- 深入理解javascript作用域和闭包
- javascript作用域和闭包使用详解
- 谈谈JavaScript中的函数与闭包
- 细品javascript 寻址,闭包,对象模型和相关问题
- JavaScript中的闭包原理分析
- 浅谈javascript中的闭包
- 学习javascript的闭包,原型,和匿名函数之旅
- javascript 闭包详解
- JavaScript 匿名函数和闭包介绍
- JavaScript 闭包深入理解(closure)
- 深入理解JavaScript 闭包究竟是什么
- 让你一句话理解闭包(简单易懂)
- 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
- 解决js函数闭包内存泄露问题的办法