文档章节

单例模式

林落雨
 林落雨
发布于 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
杭州
私信 提问

暂无文章

OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
37分钟前
9
4
[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
6
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
26
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
19
0
my.ini

1

architect刘源源
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部