Есть ли способ считать экземпляры из класса? - PullRequest
0 голосов
/ 12 мая 2019

Мне нужно отслеживать, сколько экземпляров класса было создано внутри указанного класса.Мне нужно, чтобы каждый экземпляр изначально знал, «какой» это.

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

Вот чего я хочу избежать:

class MyClass {
    this.instanceId = (window.instanceCount == undefined) ? 0 : window.instanceCount + 1;
    window.instanceCount = this.instanceId;
    ...
}

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Вы можете статически добавить счетчик к вашему «классу». Здесь я использую символ для предотвращения конфликта имен. Обратите внимание, что я проверяю, используете ли вы Burrito как функцию или класс перед увеличением счетчика.

function Burrito() {
  if (this instanceof Burrito) {
    Burrito[Burrito.counterName]++;
  }
}

Burrito.counterName = Symbol();
Burrito[Burrito.counterName] = 0;
Burrito.count = () => Burrito[Burrito.counterName];

new Burrito(); // 1
new Burrito(); // 2
Burrito();     // skipped
new Burrito(); // 3

console.log(Burrito.count());
0 голосов
/ 12 мая 2019

Для свойства не обязательно находиться в глобальной области видимости:

class MyClass {
    static count = 0;
    instanceId = MyClass.count++;
}
0 голосов
/ 12 мая 2019

Вы можете использовать static свойство и увеличить его в constructor()

class MyClass{
  static count = 0;
  constructor(){
    this.instanceId = ++MyClass.count;
  }
}
let x = new MyClass();
let y = new MyClass();

console.log(MyClass.count) //2

console.log(x.instanceId); //1
console.log(y.instanceId); //2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...