【发布时间】:2021-09-02 08:16:55
【问题描述】:
我有一个在 ngInit() 中调用的函数,它使用 array.push() 用 for 循环 中生成的值填充一个类的对象数组.
但是,一旦 for 循环完成,所有数组项都是该类的最后添加的实例。
类定义
class ABC{
time: number;
id: number;
}
函数定义
addToArray(){
let arrayTemp : ABC[]= [];
let tempClass ={} as ABC;
for (let i = 0; i < 4; i++) {
tempClass.timei+1;
tempClass.id=i;
let val=i;
arrayTemp.push(tempClass);
console.log(arrayTemp[val]); // here class objects displayed correctly
}
console.log(arrayTemp); // here all elements are just the last added class object
}
}
console.log(arrayTemp[val])的输出
for循环后console.log(arrayTemp)的输出
我不知道为什么会这样,任何帮助将不胜感激。
【问题讨论】:
-
数组中的每个元素都包含相同的 ABC 类实例。所以每次更新 tempClass 值时,每个元素都会反映变化。
-
如果你想在 for 循环的每次迭代中创建一个类的新实例,请将
let tempClass ={} as ABC;放入 for 循环中。 -
@cWerning 为什么你在评论中回答了这个问题?只需发布答案即可。
-
@AustinTFrench 因为我不遵守男人的规则
-
Javascript 不是 C++,请阅读有关函数功能的文档,是否复制参数
标签: node.js arrays angular typescript