Javascript 对象属性,而不是点:Object={…Object}
在angular 4项目中,有一行代码Javascript 对象属性,而不是点:Object={…Object},javascript,angular,object,javascript-objects,Javascript,Angular,Object,Javascript Objects,在angular 4项目中,有一行代码this.config={…this.config}。经过一些检查,它似乎没有更改this.config。但是删除该行会中断对this.config的更改检测 下面是使用该对象的组件 这是唯一修改此对象的函数 private updateConfig(value, key) { if (!this.config) { this.config = {}; } this.config[key] = value; this
this.config={…this.config}
。经过一些检查,它似乎没有更改this.config
。但是删除该行会中断对this.config
的更改检测
下面是使用该对象的组件
这是唯一修改此对象的函数
private updateConfig(value, key) {
if (!this.config) {
this.config = {};
}
this.config[key] = value;
this.config = { ...this.config }; // why does this work?
}
有人能解释一下this.config={…this.config}的作用吗?当你创建一个对象时,你创建了一个内存引用。将一个对象展开到另一个对象中会创建此对象的副本,但位于不同的内存引用中 让我们想象一下:
constobj={id:1,sub:{id:11};
const copy={…obj};
console.log(obj==复制);//假的
console.log(obj.sub==copy.sub);//真的
console.log(obj.id==copy.id);//true
创建对象时,创建内存引用。将一个对象展开到另一个对象中会创建此对象的副本,但位于不同的内存引用中
让我们想象一下:
constobj={id:1,sub:{id:11};
const copy={…obj};
console.log(obj==复制);//假的
console.log(obj.sub==copy.sub);//真的
console.log(obj.id==copy.id);//true
查找对象排列。它是原始对象的一个浅层副本。在这个赋值之后,可能有其他东西修改了this.config
?请发布完整的代码。@CertainPerformance谢谢。@bergi将更新。谢谢,谁否决了这个?这是一个措辞得体的问题,询问一些真正令人困惑的问题。即使你知道什么是对象排列,也不清楚为什么要这样做。查看对象排列。它是原始对象的一个浅层副本。在这个赋值之后,可能有其他东西修改了this.config
?请发布完整的代码。@CertainPerformance谢谢。@bergi将更新。谢谢,谁否决了这个?这是一个措辞得体的问题,询问一些真正令人困惑的问题。即使你知道什么是对象传播,也不清楚为什么要这样做。非常感谢。现在说得通了,非常感谢。现在有道理了。