javascript - 使用 Object.assign 更新对象后,在数组崩溃时调用 push 方法
问题描述
我们从网络接收 JSON,并将数据转换为 TypeScript 中类的对象,以便 getter 和 setter 工作,如下例所示
class Sent {
id: number
constructor(model? : Sent){
if(model){
Object.assign(this, model);
}
}
}
class Email{
name: string;
age: number;
sent: Sent[];
constructor(model?: Email){
if(model){
Object.assign(this, model);
for(let x of model.sent){
this.sent.push(new Sent(x))
}
}
}
}
当我们使用 JSON 数据创建一个新对象时,如下例所示,浏览器会崩溃this.sent.push(new Sent(x))
。
如果我们用它替换push
它就concat
可以了。
如果我们this.sent
在循环之前设置新的空数组,就像这样this.sent = []
,那么它也可以
只是想了解为什么push
方法在这里崩溃。任何帮助表示赞赏
Stackblitz重新创建问题。
解决方案
通过使用Object.assign(this, model);
,您只需将两个对象绑定在一起(只要 javascript 对象通过引用传递)。请参阅此代码以获取说明:
obj1 = {}
obj2 = {list: []}
Object.assign(obj1, obj2);
obj2.list.push(1);
console.log(obj1.list);
因此,在将元素添加到第二个对象的属性之后,它会出现在第一个对象中。
让我们回到你的问题。你已经绑定了this
对象model
。迭代model.send
属性,您将元素推送到this.sent
实际上与将元素推送到model.send
. 因此你得到一个无限循环。
推荐阅读
- html - 呈现 html 标签的最佳实践
- ruby - 带有 ip 验证的 Puppet ruby 模板 - 跳过失败的值而不是错误并停止
- php - Codeigniter 的 IgnatedDatatables Join 错误
- react-native - 试图安装 react-navigation ,它说如下。我该如何解决这些错误?npm 审核修复不起作用
- reactjs - 如果组件没有子组件,useCallback 是更好的选择吗
- react-native - 是否可以将动画 setValue 与 useNativeDriver 一起使用?
- fortran - 使用 `real(wp)` 我会在 Fortran 中获得更高的准确性吗?
- intellij-idea - InteliJ 在打开时抱怨 JHipster 项目文件,直到文件打开或重新编译
- python - 用于数据管理的 Excel Python 脚本
- python - 无法在 Python 中播放 ogg 文件