文档章节

单例模式

林落雨
 林落雨
发布于 2017/04/25 17:18
字数 258
阅读 1
收藏 0

静态属性中的实例

function Universe(){
    // 判断是否有现有的实例(是否缓存过实例)
    if(typeof Universe.instance === "object"){
        return Universe.instance;
    }

    this.start_time = 0;
    this.bang = 'Big';

    // 缓存实例
    Universe.instance = this;

    // 隐式返回
    // return this;
}

var uni = new Universe();
var uni2 = new Universe();
alert(uni === uni2);

缺点是instance属性是公开的,可能会被修改

闭包中的实例

function Universe(){
    //  缓存实例
    var instance = this;

    // 重写构造函数
    Universe = function(){
        return instance;
    }

    // 修正操作:防止重写构造函数丢失所有在初始定义和重定义时刻添加的属性
    
    // 保留原型属性
    Universe.prototype = this;

    // 实例
    instance = new Universe();

    // 重置构造函数指针
    instance.constructor = Universe;

    this.start_time = 0;
    this.bang = "Big";

    return instance;
}

还有一种修正方式是把构造函数和实例包装在即时函数中。在第一次调用构造函数时会创建一个对象,并且使私有instance指向该对象,第二次调用时仅会返回该对象。

var Universe;
(function(){
    var instance;
    Universe = function Universe(){
        if(instance){
            return instance;
        }

        instance = this;

        this.start_time = 0;
        this.bang = "Big";
    }
}())

 

© 著作权归作者所有

共有 人打赏支持
林落雨
粉丝 0
博文 13
码字总数 2308
作品 0
杭州

暂无文章

利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
7分钟前
0
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
30分钟前
0
0
给MySQL授权远程访问

putty登录服务器; 登录MySQL: mysql -u root -p 新建远程用户: CREATE USER 'myusername' IDENTIFIED BY 'mypassword'; 授权: grant all on *.* to john@'101.102.103.104' identified by......

sweethome
59分钟前
0
0
在t-io老巢造谣,不过有造谣的就会有反造谣的!

只发当事人的截图,不发表评论,以免有引导嫌疑 PS: 截图是由不同的人发过来的 本人已经不在此微信群 图3:有造谣的,就有反造谣的 图4是2018-09-23的t-io官方群的一个发言小统计,有助于让...

talent-tan
今天
99
0
heartbeat 资源

drbd+apache+heartbeat : http://blog.51cto.com/11838039/1827901 heartbeat双机热备的架设 : http://blog.51cto.com/11838039/1827560 对heaetbeat的深一步认识 : http://blog.51cto.co......

寰宇01
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部