gpt4 book ai didi

没有引用的Javascript克隆变量

转载 作者:行者123 更新时间:2023-11-28 08:45:44 24 4
gpt4 key购买 nike

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

我首先创建变量:

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

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

最佳答案

事实证明,这是一个完全不同的变量,在页面加载时创建引用:

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 个小时的令人头疼的事情!

关于没有引用的Javascript克隆变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19829505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com