Вариант А. считать в конструкторе, как предложил
Lynn «Кофеман» Такой вариант не учитывает удалённые объекты класса. Метода
desctructor()
в ECMAScript 6 не предусмотрено.
class Menu {
static counter = 0;
constructor(name) {
this.name = name;
++Menu.counter;
}
}
menu1 = new Menu("меню1");
menu2 = new Menu("меню2");
menu3 = new Menu("меню3");
menu4 = new Menu("меню4");
delete menu1;
console.log(Menu.counter); // 4
Вариант Б. Полагаться на родителя, хранящего ссылки на созданные инстансы. В данном случае это глобальный
window
. Тоже не лучший вариант, т.к. мало ли, где в коде содержатся ссылки на созданные объекты. Может, в анонимных функциях, вызванных по таймеру.
let count = 0;
for (obj in this) { // в примере this === window
if (this[obj] instanceof Menu) ++count;
}
console.log(count); // 4