Круговые ссылки
Вот пример кода:
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, время: 13:52. |