这是一个有角度的2项目。
我有一个包含静态城市数据的课程:
export class CityService {
private availableCities: City[] = [];
constructor() {
this.availableCities.push(new City('london', 'London'));
this.availableCities.push(new City('paris', 'Paris'));
}
getAll() {
return this.availableCities;
};
}
我有另一个课使用它:
export class NavbarComponent {
private cities: City[];
private currentCity : City;
constructor(private cityService: CityService) {
this.cities = cityService.getAll();
this.currentCity = cityService.getCurrent();
this.cities.forEach((city, index) => {
if (city.name == this.currentCity.name) {
//@todo BUG This affects private cities variable in CityService class WTF!!!!!!!
this.cities.splice(index, 1);
return;
}
})
}
}
因此,在本课程的构造函数中,我尝试使用getAll()方法加载所有城市。这些城市被加载到NavbarComponent自己的私有城市变量中。然而,当我使用NavbarComponent的城市操作时,它改变了CityService的城市私有财产! 为什么????????这破坏了我对世界的看法!
任何人都可以解释并提供链接,以便了解为何会发生这种情况
TypeScript版本2.1.5
答案 0 :(得分:1)
您已返回该城市的参考。所以你有一个带有两个引用的对象,如果你从一个引用改变它,它也将被改为第二个。在这种情况下,您可以使用PATH
函数而不是Administrator
,因为slice()
实际上更改了数组。
splice()