zoukankan      html  css  js  c++  java
  • JavaScript设计模式之单例模式

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

    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了,不会再走或的逻辑了。

  • 相关阅读:
    POJ 1981 最大点覆盖问题(极角排序)
    POJ 1286 Pólya定理
    POJ 1830 高斯消元
    HDU 3364 高斯消元
    Educational Codeforces Round 42D. Merge Equals(STL)
    ZOJ 3955:Saddle Point(思维)
    POJ 3301:Texas Trip(计算几何+三分)
    SCUT 125 :笔芯回文(DP)
    ZOJ 3953:Intervals(优先队列+思维)
    Codeforces Gym101097I:Sticks (思维)
  • 原文地址:https://www.cnblogs.com/gerry2019/p/12015925.html
Copyright © 2011-2022 走看看