На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Как удалить экземпляр класса , JavaScript
    Есть класс
    ExpandedWrap disabled
      export class MatchThree {
          wrap = document.querySelector(".wrap");
       
          constructor(rowscount, columnscount, tilescount) {
              this.game = new Game(rowscount, columnscount, tilescount);
              this.grid = new Grid(this.wrap, this.game.matrix);
              this.wrap.addEventListener("swap", (event) => {
                  const firstelementposition = event.detail.firstelementposition;
                  const secondelementposition = event.detail.secondelementposition;
                  this.Swap(firstelementposition, secondelementposition);
              });
          }
       
          async Swap(firstelementposition, secondelementposition) {
              const swapstates = this.game.Swap(firstelementposition, secondelementposition);
              await this.grid.Swap(firstelementposition, secondelementposition, swapstates);
              this.UpdateScore();
          }
       
          UpdateScore() {
              document.querySelector(".box06").innerHTML = this.game.scorehero;
          }
      }

    Создается экземпляр класса с помощью new
    (понятие экземпляр класса я по привычке взял из С++, или в JS класс это что-то другое?)
    ExpandedWrap disabled
      e.game = new MatchThree(8, 6, 4);

    А как его удалить ?

    Пробовал delete, remove, но что-то не получается.
    ExpandedWrap disabled
      export class e {
          constructor() {
              let game = null; // <---- это типа глобальная переменная, не знаю как в JS их создавать
      // в С++, где строгая типизация, было понятно, а здесь черт его знает что это, где это и вообще трудно проконтролировать,
      // поскольку веб приложение, если не может выполнить просто игнорирует - крайне плохой подход
          }
      }
      delete e.game;
    Сообщение отредактировано: H g -
      В JavaScript удалить экземпляр класса в лоб, как в C++ (delete obj), нельзя — потому что управление памятью полностью автоматизировано через сборщик мусора (garbage collector).
      Если иных ссылок на объект нет, достаточно выполнить:
      ExpandedWrap disabled
        e.game = null;

      Cборщик мусора удалит всё сам.

      Более сложный случай, когда внутри класса что-то создаётся и это нужно разрушить - создай метод destroy(), в нем все очисти. Потом получится:
      ExpandedWrap disabled
        e.game.destroy();
        e.game = null;

      По идее так должно быть.
        Спасибо, нужно попробовать
        Сообщение отредактировано: H g -
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0175 ]   [ 14 queries used ]   [ Generated: 13.09.25, 04:19 GMT ]