Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Удаление объектов класса


Автор: Avtor 23.10.2007, 19:31
Код

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1251">
    <title></title>
    <script type="text/javascript" src="../javascripts/treefunc.js"></script>    
    <script language="javascript" type="text/javascript">
//-------------------------
// Вывод дерева на экран:
function changePeriod() {
  tree = new MyTreeClass();
  ...
  tree.draw();
}
//-------------------------
</script>
  </head>
  <body>
    <form name="mainForm" action="javscript:;">
        <select name='period' onChange='javascript:changePeriod()'> 
              <option value='1' selected>1</option>
              <option value='2'>2</option>     
         </select>  
    </form>    
  </body>
</html>

Подскажите как при каждом выборе не плодить объекты класса MyTreeClass (ведь они уничтожатся только при обновлении страницы)?

Автор: cruelangel 23.10.2007, 19:46
Avtor, вынести создание объекта за пределы функции.

Автор: Avtor 23.10.2007, 20:16
Меня интересует такой вопрос: в приведенном выше коде память, занимаемая объектом класса MyTreeClass будет расти каждый раз, когда мы меняем значение select'а или сборщик мусора будет удалять старые объекты класса MyTreeClass, оставляя лишь текущий tree?

Автор: vasac 26.10.2007, 09:43
Цитата(Avtor @  23.10.2007,  20:16 Найти цитируемый пост)
память, занимаемая объектом класса MyTreeClass будет расти каждый раз, когда мы меняем значение select'а или сборщик мусора будет удалять старые объекты класса MyTreeClass, оставляя лишь текущий tree

Может будет удалятся сразу же, а может быть только когда перестанет хватать памяти, а может сборка мусора будет идти через какие-то интервалы времени.
Это знает только сборщик мусора каждого конкретного браузера.
Ну или вы сами можете проверить, смотря занимаемую память в диспетчере задач или ещё в какой-нибудь утилите.

Автор: ksnk 26.10.2007, 16:12
Можно завести в MyTreeClass какой-нибудьметод clear, чтобы почистить собственный мусор и писать как-нибудь так...
Код

function changePeriod() {
  if(!tree) 
     tree = new MyTreeClass();
  else 
     tree.clear(); // или убрать ветку else, если нету мусора.

все равно это самое tree глобальное ...

Есть еще метод delete.



Автор: Avtor 26.10.2007, 21:03
Огромное спасибо за разъяснения по поводу сборщика мусора. А метод delete - стандартный? И как реализовать tree.clear, ведь насколько я знаю непосредственных способов освобождения памяти в JavaScript нет, здесь реализовано автоматическое освобождение.

Автор: vasac 27.10.2007, 10:44
Avtor, delete удаляет свойства объектов, но не переменные.
Впрочем, к вашему случаю он не относится.
Что замена значения переменной, что delete сделают только одно — объект будет недоступен из js-сценария и с полным правом может быть удален из памяти. Когда же именно он будет удален, на это, имхо, напрямую из js повлиять нельзя.

Автор: Avtor 27.10.2007, 14:06
Спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)