Есть ли в JavaScript эквивалент метода DESTROY в Perl? - PullRequest
2 голосов
/ 20 мая 2010

Существует ли какой-либо вызываемый метод или событие, отправляемое непосредственно перед очисткой элемента сборщиком мусора 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.

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Позволяет ли XUL :: Gui взаимодействовать с браузером на уровне API SpiderMonkey? Если это так, https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.finalize может быть полезным для вас. В противном случае вы можете застрять, поскольку, как сказал выше Мэтью Флашен, в Javascript нет способа сделать это.

1 голос
/ 20 мая 2010

В чистом JavaScript нет механизма для этого.

...