Существует ли какой-либо вызываемый метод или событие, отправляемое непосредственно перед очисткой элемента сборщиком мусора JavaScript?
В Perl я бы написал:
package MyObj;
sub new {bless {}}
sub DESTROY {print "cleaning up @_\n"}
, а затем и позже:
{
my $obj = MyObj->new;
# do something with obj
} # scope ends, and assuming there are no external references to $obj,
# the DESTROY method will be called before the object's memory is freed
Моя целевая платформа - Firefox (и мне не нужно поддерживать другие браузеры), поэтому, если для этого есть только специфический для Firefox способ, это нормально.
И немного предыстории: я пишу модуль Perl XUL :: Gui , который служит мостом между Perl и Firefox, и в настоящее время я работаю над устранением нескольких утечек памяти, связанных с зависанием DOM Elements вокруг навсегда, даже после того, как они ушли, и на стороне Perl больше не осталось ссылок. Поэтому я ищу способы выяснить, когда элементы JavaScript будут уничтожены, или способ заставить JavaScript очистить объект.
Если нет способа сделать это в чистом JavaScript, приемлемо решение, использующее XPConnect / XPCOM или любую другую специфическую технологию Mozilla.