Правила закрытия сборки мусора с помощью Javascript

У меня есть программа, которая использует Javascript в качестве языка сценариев для привязки к более крупному приложению C ++. Я использую V8 и webkit как взаимозаменяемые, но базовая среда выполнения не имеет значения для этого вопроса.

В этом приложении у меня динамически созданные объекты будут получать обратные вызовы. Я создам эту привязку обратного вызова вот так ...

function f() {
  var obj = CreateNewCallbackObj();
  obj.onCallback = dowork; // dowork is a function
}

Ясно, что это будет иметь проблемы с сборщиком мусора, потому что объект obj вышел за пределы области видимости и в конечном итоге будет удален.

Я хочу, чтобы объект сам управлял своей жизнью. В конечном итоге объект получит обратный вызов, который будет сигнализировать об окончании его жизни, и когда это произойдет, он сможет удалить себя.

Одна мысль состоит в том, чтобы создать ссылку на себя, добавив obj.myself = obj. Кажется, это неправильный способ сделать это, но он может сработать, если алгоритм сборки мусора не умный.

Есть ли правильный способ сделать это? В основе не существует постоянной устойчивой модели DOM, которая была бы создана для хранения объектов, все объекты JS распределяются динамически по мере необходимости, но им нужен какой-то способ оставаться внутри механизма JS.

7
задан aughey 27 March 2011 в 18:41
поделиться