首页 > 编程语言 > 详细

JavaScript设计模式之单例模式

时间:2019-12-10 20:40:14      阅读:93      评论:0      收藏:0      [点我收藏+]

  单例模式在前端开发中,有着广泛的应用场景,像前端缓存、页面模态框的创建等,只需要初始化一次,后面直接取之前的实例就好了。通俗来说,单例模式就是保证全局仅有一个实例,并且能够全局访问,核心就是这两点。

const Singleton = function (name) {
    this.name = name
};

Singleton.prototype.getName = function () {
    console.log(this.name)
};

Singleton.getInstance = (function () {
    let instance = null;
    return function (name) {
        if (!instance) {
            instance = new Singleton(name)
        }
        return instance
    }
})();

  在JavaScript中,实现一个全局变量,最简单的就是声明一个全局变量,但是会容易造成变量污染,不建议使用。采用闭包封装私有变量,是一个不错的选择。如上述代码所示,在构造方法上声明一个获取实例的方法,声明一个私有变量,返回的方法中保存中对私有变量的引用,利用闭包,就能够一直保持每次获取的值是一样的。

  单例模式还有一个比较有用的地方就是在我们给DOM元素绑定事件时,如果只想绑定一次,防止重复绑定,那么此时,也可以利用单例模式的原理,封装一个简单的单例方法,如下所示:

const getSingle = function (fn) {
    let result;
    return function () {
        return result || (result = fn.apply(this, arguments))
    }
};

  如下测试代码:

const test = getSingle(function () {
    console.log(new Date().getTime());
    return true
});

test();
test();
test();

技术分享图片

  虽然test方法调用了三次,但是实际上只执行了一次。因为第一次返回值是true,后面调用就直接return了,不会再走或的逻辑了。

 

JavaScript设计模式之单例模式

原文:https://www.cnblogs.com/gerry2019/p/12015925.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!