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

Javascript 从构造函数初始化单个实例,并将其用作另一个类中的静态方法,javascript,class,oop,Javascript,Class,Oop,我在我的应用程序中使用了一类实用程序 它包含格式化数字的方法 class Utils { static numberFormater () { return new Intl.NumberFormat('en-US') } } 问题是,无论何时调用它,它都会返回新的numberFormat实例(这会影响代码的性能) 我想创建一个实例并在调用此方法时使用它为什么不直接创建数字格式化程序的实例呢?甚至不需要是静态属性: class-Util{ 构造函数(){ th

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

class Utils {
    static numberFormater () {
        return new Intl.NumberFormat('en-US')
    }
}
问题是,无论何时调用它,它都会返回新的numberFormat实例(这会影响代码的性能)


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

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

class-Util{
构造函数(){
this.numberFormatter=新的Intl.NumberFormat('en-US');
}
}
const util=新util;
const formatter=util.numberFormatter;
const formatter2=util.numberFormatter;

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

class-Util{
构造函数(){
this.numberFormatter=新的Intl.NumberFormat('en-US');
}
}
const util=新util;
const formatter=util.numberFormatter;
const formatter2=util.numberFormatter;
log(formatter1==formatter2)尝试添加一个初始化
数字格式的

class-Util{
构造函数(区域设置){
this.NumberFormat=新的Intl.NumberFormat(区域设置);
}
静态数字格式(){
返回此.numberFormatter;
}
}
var a=新的Util('en-US');
log(a.numberformat.format)尝试添加一个初始化
数字格式的

class-Util{
构造函数(区域设置){
this.NumberFormat=新的Intl.NumberFormat(区域设置);
}
静态数字格式(){
返回此.numberFormatter;
}
}
var a=新的Util('en-US');

log(a.numberformat.format)如果您想创建一个实例,并在每次可以使用一个实例时使用它

singleton设计模式解决了以下问题:

  • 如何确保一个类只有一个实例
  • 如何轻松访问类的唯一实例
  • 类如何控制其实例化
  • 如何限制类的实例数
  • 有关模式和javascript的更多信息,请阅读:


  • 如果您想创建一个实例,并在每次可以使用时使用它

    singleton设计模式解决了以下问题:

  • 如何确保一个类只有一个实例
  • 如何轻松访问类的唯一实例
  • 类如何控制其实例化
  • 如何限制类的实例数
  • 有关模式和javascript的更多信息,请阅读:


  • 我更喜欢,但我将保留这个选项。class Util{constructor(locale){this.numberFormatter=new Intl.NumberFormat(locale);}static numberFormatter(){return this.numberFormatter;}}var a=new Util('en-US');设b=a.numberformer;设c=a.numberformer;console.log(a==b);这返回false,我认为它仍然会为每个调用
    console.log(a==b)创建新实例,你是说
    console.log(b==c)
    a
    在该实例中是类
    Util
    b
    c
    将是实际的数字格式化程序(对我来说返回true)哦,对不起,我更喜欢,但我会保留这个。class Util{constructor(locale){this.NumberFormat=new Intl.NumberFormat(locale);}static NumberFormat(){return this.numberFormatter;}}var a=new Util('en-US');let b=a.numberFormatter;let c=a.numberFormatter;console.log(a==b);返回false我认为它仍然会为每个调用创建新实例
    console.log(a==b);
    ,你是指
    console.log(b==c);
    a
    在该实例中是类
    Util
    b
    c
    将是实际的数字格式化程序(对我来说返回true)哦,对不起,我的错请将变量名(格式化程序)改为(格式化程序1)请将变量名(格式化程序)改为(格式化程序1)