代码之家  ›  专栏  ›  技术社区  ›  Engineer Passion

从构造函数启动单个实例,并将其用作另一个类中的静态方法

  •  0
  • Engineer Passion  · 技术社区  · 6 年前

    我在我的应用程序中使用了一类实用程序 它包含一个格式化数字的方法

    class Utils {
        static numberFormater () {
            return new Intl.NumberFormat('en-US')
        }
    }
    

    问题是每当我调用它时,它都会返回新的numberformat实例(这会影响代码的性能)

    我想创建一个实例,并在调用此方法时使用它

    3 回复  |  直到 6 年前
        1
  •  3
  •   Geuis    6 年前

    为什么不直接创建数字格式化程序的实例呢?甚至不需要是静态属性:

    class Util {
      constructor () {
        this.numberFormatter = new Intl.NumberFormat('en-US');
      }
    }
    
    const util = new Util;
    
    const formatter = util.numberFormatter;
    const formatter2 = util.numberFormatter;
    
    console.log(formatter1 === formatter2);
        2
  •  1
  •   Hodrobond    6 年前

    尝试添加 constructor 它初始化 numberFormater 是的。

    class Util {
      constructor(locale) {
        this.numberFormater = new Intl.NumberFormat(locale);
      }
      static numberFormater() {
        return this.numberFormatter;
      }
    }
    
    var a = new Util('en-US');
    console.log(a.numberFormater.format);
        3
  •  1
  •   Александр Боярчук    6 年前

    如果您想创建一个实例,并在每次可以使用 Singleton pattern 是的。

    Singleton设计模式解决了如下问题:

    1. 如何确保一个类只有一个实例?
    2. 如何轻松访问类的唯一实例?
    3. 类如何控制其实例化?
    4. 如何限制类的实例数?

    有关模式和javascript的更多信息,请阅读:

    1. Singleton pattern in ES6
    2. Singleton pattern with example
    3. JavaScript Design Patterns: Singleton