Инициировать один экземпляр из конструктора и использовать его как статический метод в другом классе. - PullRequest
0 голосов
/ 06 июля 2018

У меня есть класс утилит, которые я использую во всем приложении он содержит метод для форматирования чисел

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

проблема в том, что всякий раз, когда я вызываю его, он возвращает новый экземпляр numberFormat (который влияет на производительность кода)

Я хочу создать один экземпляр и использовать его всякий раз, когда я вызываю этот метод

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Попробуйте добавить конструктор , который инициализирует 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);
0 голосов

Если вы хотите создать один экземпляр и использовать его каждый раз, когда вы можете использовать шаблон Singleton .

Шаблон проектирования Singleton решает такие проблемы, как:

  1. Как можно гарантировать, что у класса есть только один экземпляр?
  2. Как можно легко получить доступ к единственному экземпляру класса?
  3. Как класс может управлять своим созданием?
  4. Как можно ограничить количество экземпляров класса?

Более подробную информацию о шаблоне и javascript вы можете прочитать:

  1. Синглтон в ES6
  2. шаблон синглтона с примером
  3. Шаблоны проектирования JavaScript: Singleton
0 голосов
/ 06 июля 2018

Почему бы просто не создать экземпляр средства форматирования чисел напрямую? Даже не должно быть статическим свойством:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...