没有引用的Javascript克隆变量

时间:2013-11-07 06:38:36

标签: javascript reference

我有两个跟踪会话信息的变量。其中一个变量具有超时功能,而另一个变量没有(用于发送到缓存)。

我首先创建变量:

//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;

但我得到了相同的结果。非常感谢任何帮助:)

1 个答案:

答案 0 :(得分: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个小时的头疼!