Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.01.2010, 11:59
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

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

Не приведёт ли это к утечке памяти или к большому её засиранию?
Достаточно ли удалить переменную, чтобы все ссылки убил сборщик мусора?
И как можно подстраховаться, чтобы такого не происходило?
Ответить с цитированием
  #2 (permalink)  
Старый 22.01.2010, 12:14
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

А тебе вообще зачем такой код?
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2010, 12:43
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Niar
А тебе вообще зачем такой код?
Вот пример:
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();

Т.к. ссылки нет - обратиться напрямую невозможно, а надо.
Ответить с цитированием
  #4 (permalink)  
Старый 23.01.2010, 13:48
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

function UI(){
    
}
  
function SystemObject(){
  this.UI.parent = this;
}

SystemObject.prototype.UI = new UI();

var sysObject = new SystemObject;

Насколько я знаю при таком способе UI.parent хранит ссылку на родителя а не весь обьект. и как бы ты не извращался никакого захламления не будет. Ты же не callbackи делаешь когда меняешь звено цепочки. Это тоже самое что ты обращаешься в this в кажом методе.

Последний раз редактировалось PeaceCoder, 23.01.2010 в 13:51.
Ответить с цитированием
  #5 (permalink)  
Старый 23.01.2010, 15:03
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от PeaceCoder
Это тоже самое что ты обращаешься в this в кажом методе.
Вот это мне и надо... В идеале нужно примерно такое:
obj.property.method = function(){
  this // ссылка на obj.
}

Вот не знаю как правильно придумать...
Ответить с цитированием
  #6 (permalink)  
Старый 23.01.2010, 15:21
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от B~Vladi
function UI() {
     
}
   
function SystemObject(){
  this.UI.parent = this;
}
 
SystemObject.prototype.UI = new UI();
 
var sysObject = new SystemObject;
что-то как то запутано, почему не сделать так:
function SystemObject(){
    this.ui = new UI(this);
}

function UI(sObj) {
    this.sObj = sObj;
}
 
var sysObject = new SystemObject;
?
таже циклическая ссылка получится:
sysObject.ui.sObj.ui.sObj.ui…

Последний раз редактировалось Octane, 23.01.2010 в 15:57.
Ответить с цитированием
  #7 (permalink)  
Старый 23.01.2010, 18:42
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Octane
что-то как то запутано
Да ничего тут не запутано
Сообщение от Octane
почему не сделать так
Ну тут логика уже другая - создается новый объект UI при каждом вызове конструктора SystemObject, увеличивая этим занимаемую память. А так объект UI уже находится в прототипе. В общем так нельзя.
Ответить с цитированием
  #8 (permalink)  
Старый 23.01.2010, 19:00
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

хм… если ты планируешь заводить несколько экземпляров SystemObject, то почему у тебя при каждом вызове конструктора перезаписывается ссылка parent, изменения для всех экземпляров же произойдут, так нужно?)
Ответить с цитированием
  #9 (permalink)  
Старый 24.01.2010, 00:37
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Octane
хм… если ты планируешь заводить несколько экземпляров SystemObject, то почему у тебя при каждом вызове конструктора перезаписывается ссылка parent, изменения для всех экземпляров же произойдут, так нужно?)
Все правильно. UI будет получать ссылку на нужный объект при каждом вызове метода.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(DOM) JQuery получение текста ссылки Mila Общие вопросы Javascript 5 25.04.2012 13:36
overflow:auto и #-ссылки vania-pooh (X)HTML/CSS 3 02.01.2011 21:16
ССЫЛКИ (Помогите новичку) meggen (X)HTML/CSS 8 30.11.2009 10:51
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24
Помогите с формированием ссылки AnGor Общие вопросы Javascript 0 27.08.2008 17:53