JavaScript 中的单例模式 (singleton in Javascript)

单例模式的基本结构:

MyNamespace.Singleton = function() {
return {};
}();

比如:

MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();

但是,上面的Singleton在代码一加载的时候就已经建立了,怎么延迟加载呢?想象C#里怎么实现单例的:)采用下面这种模式:

MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();

具体来说,把创建单例的代码放到constructor里,在首次调用的时候再实例化:

完整的代码如下:

MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

基于用户管理的同机数据库克隆

      Oracle 同机数据库复制或克隆经常用于提供测试或开发环境。对于生成的克隆数据库有多种方式,如使用冷备方式进行数据库克隆(需要使用nid修改db_...

711
来自专栏数据之美

Hive 常见问题与技巧【Updating】

1Q: 是否有像类似于phpmyadmin一样的hive查询客户端,能以界面的方式查询hive语句和导出数据 A: 有的,客户端的话可以使用squirre...

2157
来自专栏淡定的博客

php之laravel学习常见错误4(连载中)

下面是我们整理的php的laravel学习的常见的错误以及解决的办法,我还会持续更新,请关注

1731
来自专栏智能大石头

XCode v8.11 重量级分表分库(无视海量数据)

XCode天生就有分表分库功能,设计于2005年! 历时9年,这是分表分库功能第一次针对性正式更新。 在XCode里面,分表分库非常简单,在操作数据(查询/更...

22110
来自专栏张戈的专栏

MySQL命令行工具:percona-toolkit安装使用初探

导读:percona-toolkit 源自 Maatkit 和 Aspersa 工具,这两个工具是管理 mysql 的最有名的工具,现在 Maatkit 工具已...

3787
来自专栏后端技术探索

mysql新特性

oracle官方发布的基准测试声明:In benchmark tests using SysBench Read-only Point-Selects, at ...

973
来自专栏技术碎碎念

sql server 事务处理

事物处理 事务是SQL Server中的单个逻辑单元,一个事务内的所有SQL语句作为一个整体执行,要么全部执行,要么都不执行。 事务有4个属性,称为ACID(原...

3688
来自专栏Django Scrapy

mysql安装GENERALMyISAMSAFETYDATA STORAGEBINARY LOGGINGREPLICATIONCACHES AND LIMITSINNODBLOGGINGFOR SLA

MYSQL数据库安装文档 本文档是MYSQL-5.6.25在CENTOS 6.5 64位版本上安装的文档,经过测试并没有发现问题。 安装以前先查看服务器里是...

3197
来自专栏hbbliyong

Oracle 问题小结

1.级联更新 //例子1 update (select a.name aname,b.name bname from test1 a,test2 b where...

3374
来自专栏杨建荣的学习笔记

MySQL断电恢复的一点简单分析

今天有个网友问我一个MySQL的恢复问题。提供的截图如下。 ? 对于这个问题,在一些断电的场景下还是可能出现的。我首先是要确认是否为线上业务还是测试环境...

47110

扫码关注云+社区