У меня есть две переменные, которые отслеживают информацию о сеансе. Одна из переменных имеет функции тайм-аута, а другая - нет (для отправки в кеш).Переменная клонирования 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;
но я получаю тот же результат. Любая помощь очень ценится :)
Одна вещь, которую вы можете сделать, это JSON.parse (JSON.stringify (session)), чтобы получить новый объект разыменования. – Mingle
Спасибо Калеб! Это оказалось чем-то глупо! Но я в конце концов понял это :) – Corey