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 之 ...
随机推荐
- Selenium学习资源和网站
用于收集常用的网站和学习资源: 文章: Selenium私房菜系列--总章 WEB 自动化测试工具 Selenium 简介及其应用 Selenium教程 和我一起学 Selenium WebDrive ...
- Mycat 分片规则详解--单月小时分片
实现方式:单月内按照小时拆分,最小粒度是小时,一天最多可以有24个分片,最少1个分片,下个月从头开始循环 优点:使数据按照小时来进行分时存储,颗粒度比日期(天)分片要小,适用于数据采集类存储分片 缺点 ...
- 使用TensorFlow实现回归预测
这一节使用TF搭建一个简单的神经网络用于回归预测,首先随机生成一组数据 import tensorflow as tf import numpy as np import matplotlib.pyp ...
- Ubuntu上安装和使用RabbitMQ
1. 安装RabbitMQ服务软件包 输入以下命令进行安装 #apt install rabbitmq-server 2.安装完成后在rabbitMQ中添加用户 命令:#rabbitmqctl add ...
- UITableViewStyleGrouped模式下多余间距
第一个section上边多余间距处理 // 隐藏UITableViewStyleGrouped上边多余的间隔 _tableView.tableHeaderView = [[UIView alloc] ...
- linux --> 动态库和静态库
库的分类 根据链接时期的不同,库分为静态库和动态库之分. 静态库:在链接阶段被链接的,生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 动态库:在程序执行的时候被链接的,即使程 ...
- 自己开发的 vue 滑动按钮组件 vue-better-slider
写在前面的 这个人第一次尝试开发并发布一个 vue 的组件,该组件实现了类似 ios 手机淘宝客户端 -> 消息界面中消息的滑动删除功能等,如下为该组件的文档. 一个 Vue 的滑动按钮组件,有 ...
- Java多线程:synchronized关键字和Lock
一.synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自<大型网站系统与Java中间件实践>) 案例一:其中fo ...
- 关于js中promise的面试题。
核心点promise在生命周期内有三种状态,分别是pending,fulfilled或rejected,状体改变只能是 pending-fulfilled,或者pending-rejected.而且状 ...
- markdown语法小结
引用数学公式1 \[ \begin{equation} \pi^2=x^2+y \label{eq_lab1} \end{equation} \] Here we cite this equation ...