2013-11-07 3 views
1

У меня есть две переменные, которые отслеживают информацию о сеансе. Одна из переменных имеет функции тайм-аута, а другая - нет (для отправки в кеш).Переменная клонирования Javascript без ссылки

Я начинаю с создания переменных: добавлены

//Save Session 
sessions.data[sid] = { 
    'sid':   sid, 
    'socket':  null, 
    'timeout':  null 
}; 


//Cache Data 
sessions.saved[sid] = { 'sid':sid }; 

//Save Cache 
system.cache.save('sessions', sessions.saved); 


//Begin Timeout 
sessions.data[sid].timeout = this.timeout.start(sessions.data[sid]); 

//Callback 
callback(sessions.data[sid]); 

больше переменных и вернулся к save: function(session):

//Overwrite session 
sessions.data[session.sid]   = session; 

//Duplicate Session 
sessions.saved[session.sid]   = $.extend(true,{},session); 

//Clear Duplicate Timeout 
clearTimeout(sessions.saved[session.sid].timeout); 

//Set Values to Null 
sessions.saved[session.sid].timeout  = null; 
sessions.saved[session.sid].socket  = null; 

//Save Cache 
system.cache.save('sessions', sessions.saved); 

Вопрос заключается в обе переменные (sessions.saved & & sessions.data) будет иметь timeout: null. Я читал другие статьи о том, как остановить его от передачи по ссылке, но, похоже, не может заставить его работать. Я прочитал кучу статей вроде: Clone Object without reference javascript, но не могу заставить его работать. Я также попытался установить его со своей переменной:

var unreferenced     = $.extend(true,{},session); 
sessions.saved[session.sid]   = unreferenced; 

но я получаю тот же результат. Любая помощь очень ценится :)

+0

Одна вещь, которую вы можете сделать, это JSON.parse (JSON.stringify (session)), чтобы получить новый объект разыменования. – Mingle

+0

Спасибо Калеб! Это оказалось чем-то глупо! Но я в конце концов понял это :) – Corey

ответ

0

Оказывается, это была совершенно другая переменная, которая создает ссылку, когда страница загружена:

system.cache.get('sessions',function(cache){ 
    if(cache !== null){ 
     sessions.data = JSON.parse(cache); 
     sessions.saved = sessions.data; 

     //Set new Timeouts, Log inactive users out 
     for(var key in sessions.data){ 
      sessions.data[key].timeout = sessions.timeout.start(sessions.data[key]); 
     } 
    } 
}); 

Немного надзора и 2 часа головной царапать!

Смежные вопросы