博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的单体模式四种实现方式
阅读量:4568 次
发布时间:2019-06-08

本文共 2156 字,大约阅读时间需要 7 分钟。

 

1 /*  2     1 简单单体  3 */  4 var Singleton = {  5     attr1: 1 ,  6     method1:function(){  7         //do sth  8     }  9 }; 10 alert(Singleton.attr1); 11 Singleton.method1(); 12  13 //单体模式一般用于划分命名空间 也就是区分是哪位开发人员的代码 例如 14 //张三工程师开发的代码 15 var Zhangsan = { }; 16 //把张三的逻辑写在这里面 17 Zhangsan.Singleton = { 18     attr1:1, 19     method1:function(){ 20         //do sth 21     } 22 }; 23  24  25  26  27 /* 28     2  闭包单体: 闭包主要的目的是保护私有变量数据 29 */ 30 // 命名空间 31 var Zhangsan = {}; 32 Zhangsan.Singleton = ( function(){ 33     //私有变量和方法 34     var a = 1; 35     function f(){ 36         //do sth 37     } 38     //返回单体对象 39     return { 40         attr1: a, 41         method1:function(){ 42             return f(); 43         } 44     }; 45 })(); 46 alert(Zhangsan.Singleton.attr1); 47 Zhangsan.Singleton.method1(); 48  49 /* 50     3 惰性单体:(和闭包单体有相似的地方) 51 */ 52  53 var Zhangsan = {}; 54 Zhangsan.Singleton = (function(){ 55     //私有变量 控制返回的单体对象 56     var uniqInstance; 57     //初始化方法,控制返回的单体中有哪些东西 58     function init(){ 59         //私有变量 60         var a = 10; 61         var fn = function(){ 62             alert("fn"); 63         }; 64         return { 65             attr : a, 66             method : fn 67         }; 68     } 69      70     return { 71         getInstance:function(){    //如果有单体 则返回 否则创建一个返回 72             if(!uniqInstance){    //如果不存在 73                 uniqInstance = init(); 74             } 75             return uniqInstance; 76         } 77     }; 78 })(); 79  80 //调用惰性单体 81 alert(Zhangsan.Singleton.getInstance().attr);    //10 82 Zhangsan.Singleton.getInstance().method();        //fn 83  84  85  86 /* 87     4 分支单体:判断程序分支 浏览器的差异检测 88 */ 89 var Zhangsan ={}; 90 var different = true;    //用于标记不同的浏览器 91 Zhangsan.Singleton = (function(){ 92     var objA = {    //a浏览器的内部配置 93         //属性、方法等 94         attr:"a", 95         method : function(){ 96             alert("fn"); 97         } 98     }; 99     var objB = {    //b浏览器的内部配置100         //属性、方法等101     };102     return (different) ? objA:objB;    //根据不同的浏览器 返回不同的对象103 })();104 105 alert(Zhangsan.Singleton.attr);    //a

 

转载于:https://www.cnblogs.com/Lin-Yi/p/7455525.html

你可能感兴趣的文章
Leetcode 367. Valid Perfect Square
查看>>
UVALive 3635 Pie(二分法)
查看>>
win系统查看自己电脑IP
查看>>
Backup&recovery备份和还原 mysql
查看>>
一道面试题及扩展
查看>>
Unity 3D 我来了
查看>>
setup elk with docker-compose
查看>>
C++ GUI Qt4学习笔记03
查看>>
Java基础回顾 —反射机制
查看>>
c# 前台js 调用后台代码
查看>>
2017-02-20 可编辑div中如何在光标位置添加内容
查看>>
$.ajax()方法详解
查看>>
day42
查看>>
jquery操作select(增加,删除,清空)
查看>>
Sublimetext3安装Emmet插件步骤
查看>>
MySQL配置参数
查看>>
全面理解Java内存模型
查看>>
存储过程
查看>>
生成器
查看>>
将一个数的每一位都取出来的方法!
查看>>