美文网首页
JavaScript之单例模式

JavaScript之单例模式

作者: 滚石_c2a6 | 来源:发表于2017-04-18 22:25 被阅读7次

单例模式的思想在于保证一个特定类仅有一个实例,并提供一个访问它的全局访问点。

  1. 使用对象字面量
    在使用对象字面量创建对象时,实际上就创建了一个单例。
var obj={
  name: value
}

带私有变量和私有方法的单例:

var mySingleton = function () {

    /* 这里声明私有变量和方法 */
    var privateVariable = 'something private';
    function showPrivate() {
        console.log(privateVariable);
    }

    /* 公有变量和方法(可以访问私有变量和方法) */
    return {
        publicMethod: function () {
            showPrivate();
        },
        publicVar: 'the public can see this!'
    };
};
  1. 使用new操作符
function Universe() {

    // 判断是否存在实例
    if (typeof Universe.instance === 'object') {
        return Universe.instance;
    }

    // 其它内容
    this.start_time = 0;
    this.bang = "Big";

    // 缓存
    Universe.instance = this;

    // 隐式返回this
}

// 测试
var uni = new Universe();
var uni2 = new Universe();
console.log(uni === uni2); // true

这个解决方法非常直接,唯一的缺点instance属性是公开的,有被修改的风险。

  1. 重写构造函数
function Universe() {

    // 缓存的实例
    var instance = this;

    // 其它内容
    this.start_time = 0;
    this.bang = "Big";

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

// 测试
var uni = new Universe();
var uni2 = new Universe();
console.log(uni === uni2); // true

第一次调用原始构造函数,像往常一样返回this。而第二次开始将执行重写的构造函数。但是会丢失所有在初始定义和重定义时刻之间添加到它里面的属性。

1.使用闭包封装构造函数和实例

var Universe;

(function () {

    var instance;

    Universe = function Universe() {

        if (instance) {
            return instance;
        }

        instance = this;

        // 其它内容
        this.start_time = 0;
        this.bang = "Big";
    };
} ());

//测试代码
var a = new Universe();
var b = new Universe();
alert(a === b); // true

参考:《JavaScript模式》
]http://www.cnblogs.com/TomXu/archive/2012/02/20/2352817.html[(http://www.cnblogs.com/TomXu/archive/2012/02/20/2352817.html)
http://www.dengzhr.com/js/1125

相关文章

  • Node.js与单例模式

    1、前端的JavaScript单例模式 单例模式是非常常用的设计模式,前端的JavaScript中单例模式代码可能...

  • 前端开发工程师必备系列-几个简单的JS单例模式

    前端开发工程师必备系列-几个简单的JS单例模式 JavaScript单例模式 1. 单例模式 单例模式(Singl...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • JavaScript设计模式二(单例模式)

    JavaScript设计模式二(单例模式) 这边文章主要是JavaScript中的单例模式定义: 保证一个类仅有一...

  • Java23种设计模式之「单例模式」

    单例模式 之 holder 模式 (推荐) 单例模式 之 饱汉模式(懒汉模式) 单例模式 之 双重锁检查 (Dou...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • JavaScript之单例模式

    单例模式的思想在于保证一个特定类仅有一个实例,并提供一个访问它的全局访问点。 使用对象字面量在使用对象字面量创建对...

  • JavaScript 设计模式(上)——基础知识

    系列链接 JavaScript 设计模式(上)——基础知识 JavaScript 设计模式(中)——1.单例模式 ...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • 单例模式

    单例模式及C++实现代码单例模式4种实现详解 c++11改进我们的模式之改进单例模式 单例模式(Singleton...

网友评论

      本文标题:JavaScript之单例模式

      本文链接:https://www.haomeiwen.com/subject/ptvqzttx.html