javascript - Javascript:如何在重新分配后保留对对象中断的引用?
问题描述
我为这篇文章使用的标题而苦苦挣扎。因此,让我们深入研究代码:
var arr = [1,2,3];
var obj = {a: 1, b: 2, c:3};
function func(val) {
setInterval(function(){
console.log(val);
}, 3000);
}
func(arr);
func(obj);
setTimeout(()=>{
arr[0] = 9;
obj.a = 9;
}, 3000);
setTimeout(()=>{
arr = [9,8,7];
obj = {a: 9, b: 8, c:7};
}, 3000);
JSFiddle:https ://jsfiddle.net/lyquix/obxLa3pe/
当我对元素/属性进行更改时,对 setInterval的引用arr
和obj
来自 setInterval 的引用被保留,但是当我将新数组/对象分配给arr
and时它“中断” obj
。
我的问题是:我怎样才能进行这样的分配,基本上替换对象的所有数据,而不破坏引用?有标准函数或符号吗?还是我需要先“清除”数组/对象,然后重新填充元素/属性?
就像是:
while(arr.length) {arr.pop();}
for(let key in obj){delete obj[key];}
然后重新填充...
解决方案
您可以使用盒子模式来实现这一点。
var box = {
arr: [1,2,3];
obj: { a: 1, b: 2, c:3 };
};
function log(thing) {
setInterval(() => {
console.log(thing.obj);
}, 3000);
}
log(box);
box.obj = { a: 9, b: 8, c: 7 };
将登录{ a: 9, b: 8, c: 7 }
3s。
推荐阅读
- python - 无法将我的字典转换为数据框
- javascript - 我的两个 js 函数单独工作但不能一起工作
- sql - 如何创建一个透视多列的 PostgreSQL 透视表?
- android - 更改 Firebase 通知标题颜色 - Android 9.0
- python - 在 Python 中猜测游戏循环
- android - 如何修复 Exoplayer 中捕获的视频的镜像效果
- recursion - Jackson:如何通过仅在子集合中添加 ID 字段来防止递归调用
- ios - iOS13启动画面主题
- python-3.x - 如何将微控制器连接到 GPS 模块并接收位置
- wso2 - 有没有办法为 JMS (ActiveMQ) 代理连接使用基于事件的入站端点