首页 > 解决方案 > 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的引用arrobj来自 setInterval 的引用被保留,但是当我将新数组/对象分配给arrand时它“中断” obj

我的问题是:我怎样才能进行这样的分配,基本上替换对象的所有数据,而不破坏引用?有标准函数或符号吗?还是我需要先“清除”数组/对象,然后重新填充元素/属性?

就像是:

while(arr.length) {arr.pop();}
for(let key in obj){delete obj[key];}

然后重新填充...

标签: javascript

解决方案


您可以使用盒子模式来实现这一点。

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。


推荐阅读