Круговые ссылки
Вот пример кода:
function UI(){ } function SystemObject(){ this.UI.parent = this; } SystemObject.prototype.UI = new UI(); var sysObject = new SystemObject; Получается: sysObject.UI.parent.UI.parent.UI.parent.UI.parent... Не приведёт ли это к утечке памяти или к большому её засиранию? Достаточно ли удалить переменную, чтобы все ссылки убил сборщик мусора? И как можно подстраховаться, чтобы такого не происходило? |
А тебе вообще зачем такой код?
|
Цитата:
function UI(){ } UI.prototype.method = function(){ } function SystemObject(){ this.UI.parent = this; } SystemObject.prototype.UI = new UI(); var sysObject = new SystemObject; sysObject.UI.method(); При вызове метода method, this будет указывать на объект sysObject.UI, а мне нужно внутри метода получить sysObject. Обращаться напрямую sysObject нельзя. Например: new SystemObject().method(); Т.к. ссылки нет - обратиться напрямую невозможно, а надо. |
function UI(){ } function SystemObject(){ this.UI.parent = this; } SystemObject.prototype.UI = new UI(); var sysObject = new SystemObject; Насколько я знаю при таком способе UI.parent хранит ссылку на родителя а не весь обьект. и как бы ты не извращался никакого захламления не будет. Ты же не callbackи делаешь когда меняешь звено цепочки. Это тоже самое что ты обращаешься в this в кажом методе. |
Цитата:
obj.property.method = function(){ this // ссылка на obj. } Вот не знаю как правильно придумать... |
Цитата:
function SystemObject(){ this.ui = new UI(this); } function UI(sObj) { this.sObj = sObj; } var sysObject = new SystemObject;? таже циклическая ссылка получится: sysObject.ui.sObj.ui.sObj.ui… |
Цитата:
Цитата:
|
хм… если ты планируешь заводить несколько экземпляров SystemObject, то почему у тебя при каждом вызове конструктора перезаписывается ссылка parent, изменения для всех экземпляров же произойдут, так нужно?)
|
Цитата:
|
Часовой пояс GMT +3, время: 19:31. |