单例无外乎每次调用返回的都是同一个对象,可以利用闭包实现

       function Singleton(){
this.data = "singleton";
}
Singleton.getInstance = (function(){
var instance;
return function(){
instance = instance ? instance:new Singleton;
return instance;
}
})(); var sa = Singleton.getInstance();
var sb = Singleton.getInstance();
console.log(sa === sb);
console.log(sa.data);

输出结果

这种方式比较简单,Singleton类暴露全局,直接使用Singleton.getInstance()即可。

还有种情况,假设不想暴露Singleton,可以

       var SingletonA = (function(){
var instance = null;
function Singleton(){
this.init();
}
Singleton.prototype.init = function(){
this.data = "SingletonA";
}
return function(){
if(instance == null){
instance = new Singleton();
}
return instance;
};
})();
var b = SingletonA();
var c = SingletonA();
console.log(b === c);
console.log(b.data);

输出

还有一种

       var SingletonF = function(){
if(SingletonF.instance){
console.log("不能new");
}
this.name = "gggg";
};
SingletonF.getInstance = function(name){
if(SingletonF.instance == null){
SingletonF.instance = new SingletonF();
}
return SingletonF.instance;
}
var s1 = SingletonF.getInstance("ccc");
var s2 = SingletonF.getInstance("def"); console.log(s1 === s2);
console.log(s1.name);

写法基本上大同小异,只要保证instance唯一就行了

js实现单例的更多相关文章

  1. js之单例

    所谓单例,指的是只有一个实例的对象. js通过对象字面量的方式来创建单例对象. var sig = { name:value, method:function(){ } }

  2. js的单例

     对于 JS 来说,巨大的灵活性使得其可以有多种方式实现单例模式,使用闭包方式来模拟私有数据,按照其思路可得: var single = (function(){ var unique; functi ...

  3. 学习笔记_Cocos Creator_继承组件单例

    官方文档:https://docs.cocos.com/creator/manual/zh/scripting/reference/class.html 前言 单例,在游戏开发中是比较常用的功能,全局 ...

  4. Highcharts error #16: www.highcharts.com/errors/16 js 单例

    一.问题项目某一个页面用的highcharts用来显示一张图表,第一次刷新正常,第二次就出来这个错.1二.解决问题过程在网上找了很多同样是这个错误的解决方案. 第一:加载了highstock.js然后 ...

  5. C# JS 单例

    单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 模式1: class Singleton { //私有,静态的类自身 ...

  6. JS单例设计模式

     单例,指的是只有一个实例的对象.    在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为.比如在整个系统的配置文件中,配置 ...

  7. JS单例对象与构造函数对象的区别

    JavaScript对象有几种: 内置对象如Global,Math对象等等. 本地对象如Object.Function.Array.String.Boolean.Number.Date.RegExp. ...

  8. JS设计模式1-单例模式

    单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如全局缓存,window对象.单例模式在js开发中单例模式的用途非常广泛,比如页面中有一个登录浮窗,无论单击多少次登录窗口,这个窗口只会创建一 ...

  9. SpringMvc 单例

    struts2的controller是多例,是因为其中有modeldriven将比如user 或者其他属性暴露出来,接受属性,特别是继承了actionsupport之后,fielderror的属性也会 ...

随机推荐

  1. ARST第三周打卡

    Algorithm : 做一个 leetcode 的算法题 //二位数组查找 题目描述 //在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

  2. PAT A1035 Password (20)

    AC代码 注意创造函数条件中使用引用 输出语句注意单复数 #include <cstdio> #include <cstring> #include <iostream& ...

  3. 解决Another app is currently holding the yum lock; waiting for it to exit...问题

    在下载安装nginx时出现 Another app is currently holding the yum lock; waiting for it to exit...问题 yum被锁定了 可以使 ...

  4. P1417 烹调方案(思维+01背包)

    (点击此处查看原题) 题意 有n种食材,每种食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间.问在T时间内,什么样的烹调方案 ...

  5. Boot-crm管理系统开发教程(一)

    ps:上周就把这个项目写完了,一直忘记记录,现在补上. Boot-crm是书上第十八章的内容,书上提供了前端的代码,所以只需要写后端的代码就可以了,①所以我们先把前端的代码移植到项目中. ②然后在li ...

  6. linux常用的bash指令

    文本处理 awk sed grep sort uniq cat cut echo fmt tr nl egrep fgrep wc 进程监视 ps top htop atop lsof 网络 nmap ...

  7. 27-Perl 进程管理

    1.Perl 进程管理Perl 中你可以以不同的方法来创建进程.本教程将讨论一些进程的管理方法. 你可以使用特殊变量 $$ 或 $PROCESS_ID 来获取进程 ID. %ENV 哈希存放了父进程, ...

  8. 5.Shell变量

    5.Shell变量本章介绍 shell 中所使用的变量.Bash 会自动给其中一些变量赋默认值.5.1 波恩Shell的变量Bash 使用一些和波恩 shell 同样的变量.有时,Bash 会给它赋默 ...

  9. Js 更换html同一父元素下子元素的位置

    //更换两个元素的位置 var exchange=function (el1, el2) { var ep1 = el1[0].parentNode, ep2 = el2[0].parentNode, ...

  10. ModbusTCP报文详解【一】

    [1]功能码01H [2]功能码02H [3]功能码03H [4]功能码04H