У меня есть программа, которая использует Javascript в качестве языка сценариев для привязки к более крупному приложению C ++. Я использую V8 и webkit как взаимозаменяемые, но базовая среда выполнения не имеет значения для этого вопроса.
В этом приложении у меня динамически созданные объекты будут получать обратные вызовы. Я создам эту привязку обратного вызова вот так ...
function f() {
var obj = CreateNewCallbackObj();
obj.onCallback = dowork; // dowork is a function
}
Ясно, что это будет иметь проблемы с сборщиком мусора, потому что объект obj вышел за пределы области видимости и в конечном итоге будет удален.
Я хочу, чтобы объект сам управлял своей жизнью. В конечном итоге объект получит обратный вызов, который будет сигнализировать об окончании его жизни, и когда это произойдет, он сможет удалить себя.
Одна мысль состоит в том, чтобы создать ссылку на себя, добавив obj.myself = obj. Кажется, это неправильный способ сделать это, но он может сработать, если алгоритм сборки мусора не умный.
Есть ли правильный способ сделать это? В основе не существует постоянной устойчивой модели DOM, которая была бы создана для хранения объектов, все объекты JS распределяются динамически по мере необходимости, но им нужен какой-то способ оставаться внутри механизма JS.